diff --git a/apps/browser/jest.config.js b/apps/browser/jest.config.js index 4f954afa9e..cde02cd995 100644 --- a/apps/browser/jest.config.js +++ b/apps/browser/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig"); -const sharedConfig = require("../../libs/shared/jest.config.base"); +const sharedConfig = require("../../libs/shared/jest.config.angular"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "jest-preset-angular", diff --git a/apps/cli/jest.config.js b/apps/cli/jest.config.js index 67116d394b..8765ccc8e4 100644 --- a/apps/cli/jest.config.js +++ b/apps/cli/jest.config.js @@ -1,8 +1,10 @@ const { pathsToModuleNameMapper } = require("ts-jest"); -const { compilerOptions } = require("./tsconfig.json"); -const sharedConfig = require("../../libs/shared/jest.config.base"); +const { compilerOptions } = require("./tsconfig"); +const sharedConfig = require("../../libs/shared/jest.config.ts"); + +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "ts-jest", diff --git a/apps/desktop/jest.config.js b/apps/desktop/jest.config.js index 4f954afa9e..cde02cd995 100644 --- a/apps/desktop/jest.config.js +++ b/apps/desktop/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig"); -const sharedConfig = require("../../libs/shared/jest.config.base"); +const sharedConfig = require("../../libs/shared/jest.config.angular"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "jest-preset-angular", diff --git a/apps/web/jest.config.js b/apps/web/jest.config.js index 707e8960e3..cde02cd995 100644 --- a/apps/web/jest.config.js +++ b/apps/web/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig"); -const sharedConfig = require("../../libs/shared/jest.config.base"); +const sharedConfig = require("../../libs/shared/jest.config.angular"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "jest-preset-angular", @@ -11,5 +12,4 @@ module.exports = { moduleNameMapper: pathsToModuleNameMapper(compilerOptions?.paths || {}, { prefix: "/", }), - modulePathIgnorePatterns: ["jslib"], }; diff --git a/bitwarden_license/bit-web/jest.config.js b/bitwarden_license/bit-web/jest.config.js index 84c6866a7d..17b7139049 100644 --- a/bitwarden_license/bit-web/jest.config.js +++ b/bitwarden_license/bit-web/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig"); -const sharedConfig = require("../../libs/shared/jest.config.base"); +const sharedConfig = require("../../libs/shared/jest.config.angular"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "jest-preset-angular", @@ -11,5 +12,4 @@ module.exports = { moduleNameMapper: pathsToModuleNameMapper(compilerOptions?.paths || {}, { prefix: "/", }), - modulePathIgnorePatterns: ["jslib"], }; diff --git a/jest.config.js b/jest.config.js index ec58fe0c01..8b54a82658 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,12 +2,14 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig"); +/** @type {import('jest').Config} */ module.exports = { reporters: ["default", "jest-junit"], collectCoverage: true, coverageReporters: ["html", "lcov"], coverageDirectory: "coverage", + moduleNameMapper: pathsToModuleNameMapper(compilerOptions?.paths || {}, { prefix: "/", }), @@ -30,13 +32,4 @@ module.exports = { // https://github.com/facebook/jest/issues/9430#issuecomment-1149882002 // Also anecdotally improves performance when run locally maxWorkers: 3, - globals: { - "ts-jest": { - // Further workaround for memory leak, recommended here: - // https://github.com/kulshekhar/ts-jest/issues/1967#issuecomment-697494014 - // Makes tests run faster and reduces size/rate of leak, but loses typechecking on test code - // See https://bitwarden.atlassian.net/browse/EC-497 for more info - isolatedModules: true, - }, - }, }; diff --git a/libs/angular/jest.config.js b/libs/angular/jest.config.js index 3be0f66db5..e294e4ff47 100644 --- a/libs/angular/jest.config.js +++ b/libs/angular/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("../shared/tsconfig.libs"); -const sharedConfig = require("../../libs/shared/jest.config.base"); +const sharedConfig = require("../../libs/shared/jest.config.angular"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, displayName: "libs/angular tests", diff --git a/libs/common/jest.config.js b/libs/common/jest.config.js index 29309a7830..d7f78abbf3 100644 --- a/libs/common/jest.config.js +++ b/libs/common/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("../shared/tsconfig.libs"); -const sharedConfig = require("../shared/jest.config.base"); +const sharedConfig = require("../shared/jest.config.ts"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, displayName: "libs/common tests", diff --git a/libs/components/jest.config.js b/libs/components/jest.config.js index e90c663ce9..2f4b1ed15d 100644 --- a/libs/components/jest.config.js +++ b/libs/components/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig"); -const sharedConfig = require("../../libs/shared/jest.config.base"); +const sharedConfig = require("../../libs/shared/jest.config.angular"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, displayName: "libs/components tests", diff --git a/libs/exporter/jest.config.js b/libs/exporter/jest.config.js index 2eeeefad62..68daba3d40 100644 --- a/libs/exporter/jest.config.js +++ b/libs/exporter/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("../shared/tsconfig.libs"); -const sharedConfig = require("../shared/jest.config.base"); +const sharedConfig = require("../shared/jest.config.ts"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "ts-jest", diff --git a/libs/importer/jest.config.js b/libs/importer/jest.config.js index 2eeeefad62..68daba3d40 100644 --- a/libs/importer/jest.config.js +++ b/libs/importer/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("../shared/tsconfig.libs"); -const sharedConfig = require("../shared/jest.config.base"); +const sharedConfig = require("../shared/jest.config.ts"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "ts-jest", diff --git a/libs/node/jest.config.js b/libs/node/jest.config.js index 833d03cfa5..fd7d580fda 100644 --- a/libs/node/jest.config.js +++ b/libs/node/jest.config.js @@ -2,8 +2,9 @@ const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("../shared/tsconfig.libs"); -const sharedConfig = require("../shared/jest.config.base"); +const sharedConfig = require("../shared/jest.config.ts"); +/** @type {import('jest').Config} */ module.exports = { ...sharedConfig, preset: "ts-jest", diff --git a/libs/shared/jest.config.angular.js b/libs/shared/jest.config.angular.js new file mode 100644 index 0000000000..a0dcc27516 --- /dev/null +++ b/libs/shared/jest.config.angular.js @@ -0,0 +1,32 @@ +/* eslint-env node */ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { defaultTransformerOptions } = require("jest-preset-angular/presets"); + +/** @type {import('jest').Config} */ +module.exports = { + testMatch: ["**/+(*.)+(spec).+(ts)"], + + // Workaround for a memory leak that crashes tests in CI: + // https://github.com/facebook/jest/issues/9430#issuecomment-1149882002 + // Also anecdotally improves performance when run locally + maxWorkers: 3, + + transform: { + "^.+\\.(ts|js|mjs|svg)$": [ + "jest-preset-angular", + { + ...defaultTransformerOptions, + // Jest does not use tsconfig.spec.json by default + tsconfig: "/tsconfig.spec.json", + // Further workaround for memory leak, recommended here: + // https://github.com/kulshekhar/ts-jest/issues/1967#issuecomment-697494014 + // Makes tests run faster and reduces size/rate of leak, but loses typechecking on test code + // See https://bitwarden.atlassian.net/browse/EC-497 for more info + isolatedModules: true, + astTransformers: { + before: ["/../../libs/shared/es2020-transformer.ts"], + }, + }, + ], + }, +}; diff --git a/libs/shared/jest.config.base.js b/libs/shared/jest.config.base.js deleted file mode 100644 index e0eda1c4ca..0000000000 --- a/libs/shared/jest.config.base.js +++ /dev/null @@ -1,27 +0,0 @@ -/* eslint-env node */ -module.exports = { - testMatch: ["**/+(*.)+(spec).+(ts)"], - collectCoverage: true, - coverageReporters: ["html", "lcov"], - coverageDirectory: "coverage", - - // Workaround for a memory leak that crashes tests in CI: - // https://github.com/facebook/jest/issues/9430#issuecomment-1149882002 - // Also anecdotally improves performance when run locally - maxWorkers: 3, - - globals: { - "ts-jest": { - // Jest does not use tsconfig.spec.json by default - tsconfig: "/tsconfig.spec.json", - // Further workaround for memory leak, recommended here: - // https://github.com/kulshekhar/ts-jest/issues/1967#issuecomment-697494014 - // Makes tests run faster and reduces size/rate of leak, but loses typechecking on test code - // See https://bitwarden.atlassian.net/browse/EC-497 for more info - isolatedModules: true, - astTransformers: { - before: ["/../../libs/shared/es2020-transformer.ts"], - }, - }, - }, -}; diff --git a/libs/shared/jest.config.ts.js b/libs/shared/jest.config.ts.js new file mode 100644 index 0000000000..04ab80859b --- /dev/null +++ b/libs/shared/jest.config.ts.js @@ -0,0 +1,29 @@ +/* eslint-env node */ + +/** @type {import('jest').Config} */ +module.exports = { + testMatch: ["**/+(*.)+(spec).+(ts)"], + + // Workaround for a memory leak that crashes tests in CI: + // https://github.com/facebook/jest/issues/9430#issuecomment-1149882002 + // Also anecdotally improves performance when run locally + maxWorkers: 3, + + transform: { + "^.+\\.tsx?$": [ + "ts-jest", + { + // Jest does not use tsconfig.spec.json by default + tsconfig: "/tsconfig.spec.json", + // Further workaround for memory leak, recommended here: + // https://github.com/kulshekhar/ts-jest/issues/1967#issuecomment-697494014 + // Makes tests run faster and reduces size/rate of leak, but loses typechecking on test code + // See https://bitwarden.atlassian.net/browse/EC-497 for more info + isolatedModules: true, + astTransformers: { + before: ["/../../libs/shared/es2020-transformer.ts"], + }, + }, + ], + }, +};