From 75ae97cdcf52925f0e7d81d836538e0f21ffda20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Rodrigues=20de=20Alc=C3=A2ntara?= Date: Mon, 3 Jun 2024 10:01:56 -0300 Subject: [PATCH] chore(apps/app): Setup SWC tests compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In order to speed up test executions. hyperfine --warmup 5 --prepare "nx reset && nx clear-cache" \ --runs 100 "nx run-many -t lint" Time (mean ± σ): 2.755s ± 0.046s [User: 3.335s, System: 0.221s] Range (min … max): 2.675s … 3.044s 100 runs hyperfine --warmup 5 --prepare "nx reset && nx clear-cache" \ --runs 100 "nx run-many -t build" Time (mean ± σ): 1.815s ± 0.018s [User: 1.763s, System: 0.140s] Range (min … max): 1.775s … 1.904s 100 runs hyperfine --warmup 5 --prepare "nx reset && nx clear-cache" \ --runs 100 "nx run-many -t test" Time (mean ± σ): 1.642s ± 0.009s [User: 0.792s, System: 0.140s] Range (min … max): 1.616s … 1.682s 100 runs More: - https://docs.nestjs.com/recipes/swc#monorepo - https://github.com/nrwl/nx/issues/11289#issuecomment-1824243618 - https://github.com/jestjs/jest/issues/9430 - https://npmjs.com/package/jest_workaround --- apps/app/jest.config.js | 40 ++++++++++++++++++++++--------------- apps/app/tsconfig.spec.json | 2 +- package.json | 1 + yarn.lock | 18 ++++++++++++++++- 4 files changed, 43 insertions(+), 18 deletions(-) diff --git a/apps/app/jest.config.js b/apps/app/jest.config.js index 83e5516..ff2b403 100644 --- a/apps/app/jest.config.js +++ b/apps/app/jest.config.js @@ -1,25 +1,33 @@ -let jestConfigObject = { +module.exports = { displayName: 'app', preset: '../../jest.preset.js', testEnvironment: 'node', transform: { - '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }] - }, - moduleFileExtensions: ['ts', 'js', 'html'], - coverageDirectory: '../../coverage/apps/app' -} - -if (process.env.NODE_ENV === 'CI' || process.env.CI === 'true') { - jestConfigObject.transform = { '^.+\\.[tj]s$': [ - 'ts-jest', + '@swc/jest', { - tsconfig: '/tsconfig.spec.json', - isolatedModules: true, - diagnostics: false + sourceMaps: true, + module: { + type: 'commonjs', + strict: true, + strictMode: true + }, + jsc: { + parser: { + syntax: 'typescript', + decorators: true, + dynamicImport: true + }, + transform: { + legacyDecorator: true, + decoratorMetadata: true + }, + target: 'es2021' + }, + minify: false } ] - } + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + coverageDirectory: '../../coverage/apps/app' } - -module.exports = jestConfigObject diff --git a/apps/app/tsconfig.spec.json b/apps/app/tsconfig.spec.json index c49cfea..498e808 100644 --- a/apps/app/tsconfig.spec.json +++ b/apps/app/tsconfig.spec.json @@ -11,4 +11,4 @@ "src/**/*.spec.ts", "src/**/*.d.ts" ] -} +} \ No newline at end of file diff --git a/package.json b/package.json index 94ec279..7d2c991 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@swc/cli": "^0.3.12", "@swc/core": "^1.5.24", "@swc/helpers": "^0.5.11", + "@swc/jest": "^0.2.36", "@types/jest": "^29.5.12", "@types/node": "~20.14.1", "@typescript-eslint/eslint-plugin": "^7.12.0", diff --git a/yarn.lock b/yarn.lock index f44edcf..648feec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1234,6 +1234,13 @@ slash "^3.0.0" strip-ansi "^6.0.0" +"@jest/create-cache-key-function@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0" + integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== + dependencies: + "@jest/types" "^29.6.3" + "@jest/environment@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" @@ -2061,6 +2068,15 @@ dependencies: tslib "^2.4.0" +"@swc/jest@^0.2.36": + version "0.2.36" + resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.36.tgz#2797450a30d28b471997a17e901ccad946fe693e" + integrity sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw== + dependencies: + "@jest/create-cache-key-function" "^29.7.0" + "@swc/counter" "^0.1.3" + jsonc-parser "^3.2.0" + "@swc/types@^0.1.7": version "0.1.7" resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.7.tgz#ea5d658cf460abff51507ca8d26e2d391bafb15e" @@ -6235,7 +6251,7 @@ jsonc-parser@3.2.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== -jsonc-parser@3.2.1: +jsonc-parser@3.2.1, jsonc-parser@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==