From 9c8c3b3e00aa8e7999c7d58c1e03f7a68c8ca222 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Mon, 15 Nov 2021 12:10:51 -0500 Subject: [PATCH] fix(jest-worker): don't pass fork options as workerData --- packages/jest-worker/src/types.ts | 1 + .../src/workers/NodeThreadsWorker.ts | 19 +++++++---------- .../__tests__/NodeThreadsWorker.test.js | 21 ++++++++++--------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/packages/jest-worker/src/types.ts b/packages/jest-worker/src/types.ts index 7211d3d93993..43b5a1dbd298 100644 --- a/packages/jest-worker/src/types.ts +++ b/packages/jest-worker/src/types.ts @@ -125,6 +125,7 @@ export type WorkerOptions = { maxRetries: number; workerId: number; workerPath: string; + workerData?: any; }; // Messages passed from the parent to the children. diff --git a/packages/jest-worker/src/workers/NodeThreadsWorker.ts b/packages/jest-worker/src/workers/NodeThreadsWorker.ts index ab7178b89a8e..6ef6a47bc703 100644 --- a/packages/jest-worker/src/workers/NodeThreadsWorker.ts +++ b/packages/jest-worker/src/workers/NodeThreadsWorker.ts @@ -60,22 +60,19 @@ export default class ExperimentalWorker implements WorkerInterface { initialize(): void { this._worker = new Worker(path.resolve(__dirname, './threadChild.js'), { + env: { + ...process.env, + JEST_WORKER_ID: String(this._options.workerId + 1), // 0-indexed workerId, 1-indexed JEST_WORKER_ID + } as NodeJS.ProcessEnv, eval: false, + // Suppress --debug / --inspect flags while preserving others (like --harmony). + execArgv: process.execArgv.filter(v => !/^--(debug|inspect)/.test(v)), // @ts-expect-error: added in newer versions resourceLimits: this._options.resourceLimits, stderr: true, stdout: true, - workerData: { - cwd: process.cwd(), - env: { - ...process.env, - JEST_WORKER_ID: String(this._options.workerId + 1), // 0-indexed workerId, 1-indexed JEST_WORKER_ID - } as NodeJS.ProcessEnv, - // Suppress --debug / --inspect flags while preserving others (like --harmony). - execArgv: process.execArgv.filter(v => !/^--(debug|inspect)/.test(v)), - silent: true, - ...this._options.forkOptions, - }, + workerData: this._options.workerData, + ...this._options.forkOptions, }); if (this._worker.stdout) { diff --git a/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js b/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js index 5bc2fe215aa1..afd4f1824853 100644 --- a/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js +++ b/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js @@ -51,7 +51,7 @@ afterEach(() => { process.execArgv = originalExecArgv; }); -it('passes fork options down to child_process.fork, adding the defaults', () => { +it('passes fork options down to worker_threads.Worker, adding the defaults', () => { const thread = require.resolve('../threadChild'); process.execArgv = ['--inspect', '-p']; @@ -59,25 +59,28 @@ it('passes fork options down to child_process.fork, adding the defaults', () => // eslint-disable-next-line no-new new Worker({ forkOptions: { - cwd: '/tmp', execPath: 'hello', }, maxRetries: 3, + workerData: { + foo: 'bar', + }, workerId: process.env.JEST_WORKER_ID - 1, workerPath: '/tmp/foo/bar/baz.js', }); expect(workerThreads.mock.calls[0][0]).toBe(thread.replace(/\.ts$/, '.js')); expect(workerThreads.mock.calls[0][1]).toEqual({ + env: process.env, // Default option. eval: false, + execArgv: ['-p'], // Filtered option. + execPath: 'hello', // Added option. + resourceLimits: undefined, stderr: true, stdout: true, workerData: { - cwd: '/tmp', // Overridden default option. - env: process.env, // Default option. - execArgv: ['-p'], // Filtered option. - execPath: 'hello', // Added option. - silent: true, // Default option. + // Added option. + foo: 'bar', }, }); }); @@ -91,9 +94,7 @@ it('passes workerId to the thread and assign it to env.JEST_WORKER_ID', () => { workerPath: '/tmp/foo', }); - expect(workerThreads.mock.calls[0][1].workerData.env.JEST_WORKER_ID).toEqual( - '3', - ); + expect(workerThreads.mock.calls[0][1].env.JEST_WORKER_ID).toEqual('3'); }); it('initializes the thread with the given workerPath', () => {