From a391a0b0935e0642197c1afb4b24f14cb40bbfb1 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 28 Dec 2020 15:55:35 +0100 Subject: [PATCH 1/3] fix(workers): use advanced serialization by default in child process workers --- CHANGELOG.md | 1 + packages/jest-runner/src/index.ts | 3 ++- packages/jest-worker/README.md | 2 +- packages/jest-worker/src/workers/ChildProcessWorker.ts | 3 +++ .../src/workers/__tests__/ChildProcessWorker.test.js | 1 + 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68d80297ca28..e70000d8286f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ - `[jest-test-result]` Add duration property to JSON test output ([#12518](https://github.com/facebook/jest/pull/12518)) - `[jest-watcher]` [**BREAKING**] Make `PatternPrompt` class to take `entityName` as third constructor parameter instead of `this._entityName` ([#12591](https://github.com/facebook/jest/pull/12591)) - `[jest-worker]` [**BREAKING**] Allow only absolute `workerPath` ([#12343](https://github.com/facebook/jest/pull/12343)) +- `[jest-worker]` [**BREAKING**] Default to advanced serialization when using child process workers ([#10983] (https://github.com/facebook/jest/pull/10983)) - `[pretty-format]` New `maxWidth` parameter ([#12402](https://github.com/facebook/jest/pull/12402)) ### Fixes diff --git a/packages/jest-runner/src/index.ts b/packages/jest-runner/src/index.ts index 01434c043bf8..627b446798f2 100644 --- a/packages/jest-runner/src/index.ts +++ b/packages/jest-runner/src/index.ts @@ -105,7 +105,8 @@ export default class TestRunner extends EmittingTestRunner { const worker = new Worker(TEST_WORKER_PATH, { exposedMethods: ['worker'], - forkOptions: {stdio: 'pipe'}, + // @ts-expect-error: option does not exist on the node 12 types + forkOptions: {serialization: 'json', stdio: 'pipe'}, maxRetries: 3, numWorkers: this._globalConfig.maxWorkers, setupArgs: [{serializableResolvers: Array.from(resolvers.values())}], diff --git a/packages/jest-worker/README.md b/packages/jest-worker/README.md index 302e3682bf99..c8a29401c19d 100644 --- a/packages/jest-worker/README.md +++ b/packages/jest-worker/README.md @@ -73,7 +73,7 @@ List of method names that can be called on the child processes from the parent p #### `forkOptions: ForkOptions` (optional) -Allow customizing all options passed to `child_process.fork`. By default, some values are set (`cwd`, `env` and `execArgv`), but you can override them and customize the rest. For a list of valid values, check [the Node documentation](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options). +Allow customizing all options passed to `child_process.fork`. By default, some values are set (`cwd`, `env`, `execArgv` and `serialization`), but you can override them and customize the rest. For a list of valid values, check [the Node documentation](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options). #### `maxRetries: number` (optional) diff --git a/packages/jest-worker/src/workers/ChildProcessWorker.ts b/packages/jest-worker/src/workers/ChildProcessWorker.ts index 8d07b0a12e86..c3a2f2ab4d78 100644 --- a/packages/jest-worker/src/workers/ChildProcessWorker.ts +++ b/packages/jest-worker/src/workers/ChildProcessWorker.ts @@ -92,6 +92,9 @@ export default class ChildProcessWorker implements WorkerInterface { }, // Suppress --debug / --inspect flags while preserving others (like --harmony). execArgv: process.execArgv.filter(v => !/^--(debug|inspect)/.test(v)), + // default to advanced serialization in order to match worker threads + // @ts-expect-error: option does not exist on the node 12 types + serialization: 'advanced', silent: true, ...this._options.forkOptions, }); diff --git a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js index e5e7e1e99694..1caa8e654380 100644 --- a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js +++ b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js @@ -70,6 +70,7 @@ it('passes fork options down to child_process.fork, adding the defaults', () => env: {...process.env, FORCE_COLOR: supportsColor.stdout ? '1' : undefined}, // Default option. execArgv: ['-p'], // Filtered option. execPath: 'hello', // Added option. + serialization: 'advanced', // Default option. silent: true, // Default option. }); }); From cd22c478c9390432ada049c2865c5a874401e143 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 24 Feb 2022 20:32:04 +0100 Subject: [PATCH 2/3] more defaul json serialization --- packages/jest-haste-map/src/index.ts | 2 ++ packages/jest-reporters/src/CoverageReporter.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/jest-haste-map/src/index.ts b/packages/jest-haste-map/src/index.ts index 4254eb2c52ad..a203bea0a845 100644 --- a/packages/jest-haste-map/src/index.ts +++ b/packages/jest-haste-map/src/index.ts @@ -747,6 +747,8 @@ export default class HasteMap extends EventEmitter { // @ts-expect-error: assignment of a worker with custom properties. this._worker = new Worker(require.resolve('./worker'), { exposedMethods: ['getSha1', 'worker'], + // @ts-expect-error: option does not exist on the node 12 types + forkOptions: {serialization: 'json'}, maxRetries: 3, numWorkers: this._options.maxWorkers, }) as WorkerInterface; diff --git a/packages/jest-reporters/src/CoverageReporter.ts b/packages/jest-reporters/src/CoverageReporter.ts index dc4d87daa6c1..dd1a52b99e98 100644 --- a/packages/jest-reporters/src/CoverageReporter.ts +++ b/packages/jest-reporters/src/CoverageReporter.ts @@ -144,6 +144,8 @@ export default class CoverageReporter extends BaseReporter { } else { worker = new Worker(require.resolve('./CoverageWorker'), { exposedMethods: ['worker'], + // @ts-expect-error: option does not exist on the node 12 types + forkOptions: {serialization: 'json'}, maxRetries: 2, numWorkers: this._globalConfig.maxWorkers, }); From 7a681cfdf37c47f3f2eb943dbe75568d5ec733a6 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 20 Apr 2022 14:01:48 +0200 Subject: [PATCH 3/3] moar --- packages/jest-worker/src/__tests__/leak-integration.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/jest-worker/src/__tests__/leak-integration.test.ts b/packages/jest-worker/src/__tests__/leak-integration.test.ts index af5e827bc296..ef10567fe5fc 100644 --- a/packages/jest-worker/src/__tests__/leak-integration.test.ts +++ b/packages/jest-worker/src/__tests__/leak-integration.test.ts @@ -53,6 +53,8 @@ describe('Worker leaks', () => { worker = new Worker(workerFile, { enableWorkerThreads: false, exposedMethods: ['fn'], + // @ts-expect-error: option does not exist on the node 12 types + forkOptions: {serialization: 'json'}, }); }); afterEach(async () => {