Skip to content

Commit

Permalink
馃敤 Faster tests execution with babel (#4338)
Browse files Browse the repository at this point in the history
Up-to-now, we used to rely on ts-jest to run our tests against jest. But while powerful, it also imply checking the types which come with a non-negligeable cost. As we already check the types into a dedicated CI tasks, we prefer not spending this time again in the test part.

Let's see what will be the perfromance impact of such change.
  • Loading branch information
dubzzz committed Oct 21, 2023
1 parent f3b2d40 commit 183150d
Show file tree
Hide file tree
Showing 27 changed files with 257 additions and 263 deletions.
7 changes: 7 additions & 0 deletions .yarn/versions/7dde54b1.yml
@@ -0,0 +1,7 @@
declined:
- fast-check
- "@fast-check/jest"
- "@fast-check/packaged"
- "@fast-check/poisoning"
- "@fast-check/vitest"
- "@fast-check/worker"
3 changes: 3 additions & 0 deletions examples/babel.config.cjs
@@ -0,0 +1,3 @@
module.exports = {
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-react', '@babel/preset-typescript'],
};
4 changes: 4 additions & 0 deletions examples/jest.config.cjs
@@ -0,0 +1,4 @@
module.exports = {
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
testEnvironment: 'jsdom',
};
23 changes: 6 additions & 17 deletions examples/package.json
Expand Up @@ -19,31 +19,20 @@
"supertest": "^6.3.3"
},
"devDependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-react": "^7.22.15",
"@babel/preset-typescript": "^7.23.2",
"@types/express": "^4.17.20",
"@types/jest": "^29.5.6",
"@types/lodash": "^4.14.200",
"@types/react": "^18.2.31",
"@types/supertest": "^2.0.15",
"babel-jest": "^29.7.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"ts-jest": "^29.1.1",
"typescript": "~5.2.2"
},
"author": "Nicolas DUBIEN <github@dubien.org>",
"license": "MIT",
"jest": {
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx"
],
"transform": {
"^.+\\.(ts|tsx)$": "ts-jest"
},
"setupFilesAfterEnv": [
"<rootDir>/jest.setup.js"
],
"testEnvironment": "jsdom"
}
"license": "MIT"
}
3 changes: 3 additions & 0 deletions packages/fast-check/babel.config.cjs
@@ -0,0 +1,3 @@
module.exports = {
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
};
5 changes: 0 additions & 5 deletions packages/fast-check/jest.config.cjs
Expand Up @@ -2,13 +2,8 @@
// Useful for Jest plugin of vscode

module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
transform: {
'^.+\\.(ts|tsx)$': ['ts-jest', { tsconfig: 'tsconfig.json' }],
},
collectCoverageFrom: ['<rootDir>/src/**'],
testMatch: ['<rootDir>/test/**/*.spec.ts'],
setupFiles: [],
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
preset: 'ts-jest',
};
5 changes: 4 additions & 1 deletion packages/fast-check/package.json
Expand Up @@ -63,18 +63,21 @@
"pure-rand": "^6.0.0"
},
"devDependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.23.2",
"@fast-check/expect-type": "workspace:*",
"@fast-check/poisoning": "workspace:*",
"@microsoft/api-extractor": "^7.38.0",
"@types/jest": "^29.5.6",
"@types/node": "^18.18.6",
"babel-jest": "^29.7.0",
"buffer": "^6.0.3",
"cross-env": "^7.0.3",
"glob": "^10.3.10",
"jest": "^29.7.0",
"regexp-tree": "^0.1.27",
"replace-in-file": "^7.0.1",
"ts-jest": "^29.1.1",
"typedoc": "^0.25.2",
"typescript": "~5.2.2"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/fast-check/test/e2e/Poisoning.spec.ts
Expand Up @@ -210,7 +210,6 @@ function dropMainGlobals(): void {
BigInt64Array,
DataView,
TextEncoder,
TextDecoder,
AbortController,
AbortSignal,
EventTarget,
Expand Down Expand Up @@ -262,6 +261,7 @@ function dropMainGlobals(): void {
'Headers', // Unknown in CI against macOS
'Request', // Unknown in CI against macOS
'Response', // Unknown in CI against macOS
'TextDecoder', // Leveraged by @jridgewell/sourcemap-codec which is used by babel
]);
const allAccessibleGlobals = Object.keys(Object.getOwnPropertyDescriptors(globalThis)).filter(
(globalName) =>
Expand Down
Expand Up @@ -6,18 +6,19 @@ exports[`NoRegressionStack not a function 1`] = `
Counterexample: [0]
Shrunk 1 time(s)
Got TypeError: v is not a function
at packages/fast-check/test/e2e/NoRegressionStack.spec.ts:26:14
at v (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:26:14)
at Property.p [as predicate] (packages/fast-check/src/check/property/Property.ts:23:56)
at Property.predicate [as run] (packages/fast-check/src/check/property/Property.generic.ts:136:27)
at run (packages/fast-check/src/check/runner/Runner.ts:37:26)
at runIt (packages/fast-check/src/check/runner/Runner.ts:154:7)
at Object.check (packages/fast-check/src/check/runner/Runner.ts:206:15)
at packages/fast-check/test/e2e/NoRegressionStack.spec.ts:40:7
at assert (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:24:12)
at run (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:40:7)
at _toThrowErrorMatchingSnapshot (node_modules/jest-snapshot/build/index.js:?:?)
at Object.toThrowErrorMatchingSnapshot (node_modules/jest-snapshot/build/index.js:?:?)
at __EXTERNAL_MATCHER_TRAP__ (node_modules/expect/build/index.js:?:?)
at Object.throwingMatcher [as toThrowErrorMatchingSnapshot] (node_modules/expect/build/index.js:?:?)
at Object.<anonymous> (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:31:7)"
at Object.toThrowErrorMatchingSnapshot (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:31:7)"
`;

exports[`NoRegressionStack throw 1`] = `
Expand All @@ -32,10 +33,11 @@ Got error: a must be >= b
at run (packages/fast-check/src/check/runner/Runner.ts:37:26)
at runIt (packages/fast-check/src/check/runner/Runner.ts:154:7)
at Object.check (packages/fast-check/src/check/runner/Runner.ts:206:15)
at packages/fast-check/test/e2e/NoRegressionStack.spec.ts:40:7
at assert (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:9:12)
at run (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:40:7)
at _toThrowErrorMatchingSnapshot (node_modules/jest-snapshot/build/index.js:?:?)
at Object.toThrowErrorMatchingSnapshot (node_modules/jest-snapshot/build/index.js:?:?)
at __EXTERNAL_MATCHER_TRAP__ (node_modules/expect/build/index.js:?:?)
at Object.throwingMatcher [as toThrowErrorMatchingSnapshot] (node_modules/expect/build/index.js:?:?)
at Object.<anonymous> (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:18:7)"
at Object.toThrowErrorMatchingSnapshot (packages/fast-check/test/e2e/NoRegressionStack.spec.ts:18:7)"
`;
9 changes: 6 additions & 3 deletions packages/fast-check/test/unit/utils/stringify.spec.ts
Expand Up @@ -419,7 +419,8 @@ describe('stringify', () => {

// prettier-ignore
const instance3 = { [toStringMethod]: () => { throw new Error('hello3'); } };
expect(stringify(instance3)).toEqual(
const stringified3 = stringify(instance3);
expect(stringified3.replace(/[\s\n]+/g, ' ')).toEqual(
'{[Symbol("fast-check/toStringMethod")]:() => { throw new Error(\'hello3\'); }}',
); // fallbacking to default

Expand Down Expand Up @@ -555,7 +556,8 @@ describe('asyncStringify', () => {

// prettier-ignore
const instance4 = { [asyncToStringMethod]: async () => { throw new Error('hello4'); } };
expect(await asyncStringify(instance4)).toEqual(
const stringified4 = await asyncStringify(instance4);
expect(stringified4.replace(/[\s\n]+/g, ' ')).toEqual(
'{[Symbol("fast-check/asyncToStringMethod")]:async () => { throw new Error(\'hello4\'); }}',
); // fallbacking to default

Expand All @@ -565,7 +567,8 @@ describe('asyncStringify', () => {

// prettier-ignore
const instance6 = { [asyncToStringMethod]: () => { throw new Error('hello6'); } }; // throw is sync
expect(await asyncStringify(instance6)).toEqual(
const stringified6 = await asyncStringify(instance6);
expect(stringified6.replace(/[\s\n]+/g, ' ')).toEqual(
'{[Symbol("fast-check/asyncToStringMethod")]:() => { throw new Error(\'hello6\'); }}',
); // fallbacking to default

Expand Down
3 changes: 3 additions & 0 deletions packages/jest/babel.config.cjs
@@ -0,0 +1,3 @@
module.exports = {
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
};
4 changes: 0 additions & 4 deletions packages/jest/jest.config.cjs
@@ -1,7 +1,3 @@
module.exports = {
transform: {
'^.+\\.(ts|tsx)$': ['ts-jest', { tsconfig: 'tsconfig.json' }],
},
preset: 'ts-jest',
testPathIgnorePatterns: ['/generated-tests/'],
};
5 changes: 4 additions & 1 deletion packages/jest/package.json
Expand Up @@ -72,14 +72,17 @@
}
},
"devDependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.23.2",
"@fast-check/worker": "workspace:*",
"@jest/expect": "^29.7.0",
"@jest/globals": "^29.7.0",
"@types/node": "^18.18.6",
"babel-jest": "^29.7.0",
"fast-check": "workspace:*",
"jest": "^29.7.0",
"jest-jasmine2": "^29.7.0",
"ts-jest": "^29.1.1",
"typescript": "~5.2.2"
},
"keywords": [
Expand Down
3 changes: 3 additions & 0 deletions packages/packaged/babel.config.cjs
@@ -0,0 +1,3 @@
module.exports = {
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
};
5 changes: 0 additions & 5 deletions packages/packaged/jest.config.cjs
@@ -1,11 +1,6 @@
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'],
transform: {
'^.+\\.(ts|tsx)$': ['ts-jest', { tsconfig: 'tsconfig.json' }],
},
collectCoverageFrom: ['<rootDir>/src/**'],
testMatch: ['<rootDir>/test/**/*.spec.ts'],
setupFiles: [],
setupFilesAfterEnv: [],
preset: 'ts-jest',
};
5 changes: 4 additions & 1 deletion packages/packaged/package.json
Expand Up @@ -39,11 +39,14 @@
"tar": "^6.1.11"
},
"devDependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.23.2",
"@types/jest": "^29.5.6",
"@types/pacote": "^11.1.7",
"@types/tar": "^6.1.7",
"babel-jest": "^29.7.0",
"jest": "^29.7.0",
"ts-jest": "^29.1.1",
"typescript": "~5.2.2"
},
"keywords": [],
Expand Down
3 changes: 3 additions & 0 deletions packages/poisoning/babel.config.cjs
@@ -0,0 +1,3 @@
module.exports = {
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
};
6 changes: 1 addition & 5 deletions packages/poisoning/jest.config.cjs
@@ -1,7 +1,3 @@
module.exports = {
transform: {
'^.+\\.(ts|tsx)$': ['ts-jest', { tsconfig: 'tsconfig.json' }],
},
preset: 'ts-jest',
resolver: 'ts-jest-resolver',
resolver: 'jest-ts-webcompat-resolver',
};
7 changes: 5 additions & 2 deletions packages/poisoning/package.json
Expand Up @@ -43,9 +43,12 @@
},
"homepage": "https://github.com/dubzzz/fast-check/tree/main/packages/poisoning#readme",
"devDependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.23.2",
"babel-jest": "^29.7.0",
"jest": "^29.7.0",
"ts-jest": "^29.1.1",
"ts-jest-resolver": "^2.0.1",
"jest-ts-webcompat-resolver": "^1.0.0",
"typescript": "~5.2.2"
},
"keywords": [
Expand Down
3 changes: 3 additions & 0 deletions packages/vitest/babel.config.cjs
@@ -0,0 +1,3 @@
module.exports = {
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
};
4 changes: 0 additions & 4 deletions packages/vitest/jest.config.cjs
@@ -1,7 +1,3 @@
module.exports = {
transform: {
'^.+\\.(ts|tsx)$': ['ts-jest', { tsconfig: 'tsconfig.json' }],
},
preset: 'ts-jest',
testPathIgnorePatterns: ['/generated-tests/'],
};
4 changes: 4 additions & 0 deletions packages/vitest/package.json
Expand Up @@ -50,6 +50,10 @@
"vitest": ">=0.28.1"
},
"devDependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.23.2",
"babel-jest": "^29.7.0",
"fast-check": "workspace:*",
"jest": "^29.7.0",
"typescript": "~5.2.2",
Expand Down
3 changes: 3 additions & 0 deletions packages/worker/babel.config.cjs
@@ -0,0 +1,3 @@
module.exports = {
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
};
6 changes: 1 addition & 5 deletions packages/worker/jest.config.cjs
@@ -1,7 +1,3 @@
module.exports = {
transform: {
'^.+\\.(ts|tsx)$': ['ts-jest', { tsconfig: 'tsconfig.json' }],
},
preset: 'ts-jest',
resolver: 'ts-jest-resolver',
resolver: 'jest-ts-webcompat-resolver',
};
7 changes: 5 additions & 2 deletions packages/worker/package.json
Expand Up @@ -49,9 +49,12 @@
"fast-check": "^3.4.0"
},
"devDependencies": {
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.23.2",
"babel-jest": "^29.7.0",
"jest": "^29.7.0",
"ts-jest": "^29.1.1",
"ts-jest-resolver": "^2.0.1",
"jest-ts-webcompat-resolver": "^1.0.0",
"typescript": "~5.2.2"
},
"keywords": [
Expand Down
3 changes: 2 additions & 1 deletion packages/worker/test/internals/worker-pool/BasicPool.spec.ts
@@ -1,6 +1,7 @@
import { PoolToWorkerMessage, WorkerToPoolMessage } from '../../../src/internals/worker-pool/IWorkerPool.js';
import { BasicPool } from '../../../src/internals/worker-pool/BasicPool.js';
import * as WorkerThreadsMock from 'node:worker_threads';
// @ts-expect-error - It should normally be "* as WorkerThreadsMock" but it does not work anymore since we switched to babel (instead of ts-jest)
import WorkerThreadsMock from 'node:worker_threads';

describe('BasicPool', () => {
it('should instantly register handlers when spawning workers', () => {
Expand Down

0 comments on commit 183150d

Please sign in to comment.