From 98a2b5b97a240d027be6123e4d2c599569789fe4 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Mon, 15 Nov 2021 12:10:51 -0500 Subject: [PATCH 1/4] fix(jest-worker): don't pass fork options as workerData --- packages/jest-worker/src/types.ts | 1 + .../src/workers/NodeThreadsWorker.ts | 22 +++++++++---------- .../__tests__/NodeThreadsWorker.test.js | 21 +++++++++--------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/jest-worker/src/types.ts b/packages/jest-worker/src/types.ts index 3022faf3c93f..f57edd6b261f 100644 --- a/packages/jest-worker/src/types.ts +++ b/packages/jest-worker/src/types.ts @@ -125,6 +125,7 @@ export type WorkerOptions = { setupArgs: Array; maxRetries: number; workerId: number; + workerData?: any; workerPath: string; }; diff --git a/packages/jest-worker/src/workers/NodeThreadsWorker.ts b/packages/jest-worker/src/workers/NodeThreadsWorker.ts index efd5d60af57c..ee2b99150a93 100644 --- a/packages/jest-worker/src/workers/NodeThreadsWorker.ts +++ b/packages/jest-worker/src/workers/NodeThreadsWorker.ts @@ -63,22 +63,20 @@ 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 + }, 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, - }, - } as WorkerThreadsWorkerOptions); + workerData: this._options.workerData, + ...this._options.forkOptions, + }); if (this._worker.stdout) { if (!this._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', () => { From 7c63f64d7cab355f64e293ea86d7a8dea4e75a3b Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Mon, 15 Nov 2021 13:31:32 -0500 Subject: [PATCH 2/4] fix(jest-worker): filtering --inspect from execArgv is unnecessary for thread works --- packages/jest-worker/src/workers/NodeThreadsWorker.ts | 3 +-- .../src/workers/__tests__/NodeThreadsWorker.test.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/jest-worker/src/workers/NodeThreadsWorker.ts b/packages/jest-worker/src/workers/NodeThreadsWorker.ts index ee2b99150a93..5b9a3b84ef37 100644 --- a/packages/jest-worker/src/workers/NodeThreadsWorker.ts +++ b/packages/jest-worker/src/workers/NodeThreadsWorker.ts @@ -68,8 +68,7 @@ export default class ExperimentalWorker implements WorkerInterface { JEST_WORKER_ID: String(this._options.workerId + 1), // 0-indexed workerId, 1-indexed JEST_WORKER_ID }, eval: false, - // Suppress --debug / --inspect flags while preserving others (like --harmony). - execArgv: process.execArgv.filter(v => !/^--(debug|inspect)/.test(v)), + execArgv: process.execArgv, // @ts-expect-error: added in newer versions resourceLimits: this._options.resourceLimits, stderr: true, diff --git a/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js b/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js index afd4f1824853..9e1d6500b104 100644 --- a/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js +++ b/packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js @@ -73,7 +73,7 @@ it('passes fork options down to worker_threads.Worker, adding the defaults', () expect(workerThreads.mock.calls[0][1]).toEqual({ env: process.env, // Default option. eval: false, - execArgv: ['-p'], // Filtered option. + execArgv: ['--inspect', '-p'], execPath: 'hello', // Added option. resourceLimits: undefined, stderr: true, From 42224734975437b63a006d7dc7924e79cf01eadb Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 29 Nov 2021 14:02:40 +0100 Subject: [PATCH 3/4] remove unuseed import --- packages/jest-worker/src/workers/NodeThreadsWorker.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/jest-worker/src/workers/NodeThreadsWorker.ts b/packages/jest-worker/src/workers/NodeThreadsWorker.ts index 5b9a3b84ef37..da6c3741b6b0 100644 --- a/packages/jest-worker/src/workers/NodeThreadsWorker.ts +++ b/packages/jest-worker/src/workers/NodeThreadsWorker.ts @@ -7,10 +7,7 @@ import * as path from 'path'; import {PassThrough} from 'stream'; -import { - Worker, - WorkerOptions as WorkerThreadsWorkerOptions, -} from 'worker_threads'; +import {Worker} from 'worker_threads'; import mergeStream = require('merge-stream'); import { CHILD_MESSAGE_INITIALIZE, From 23e39a4c80afecc6a6f96a00b79aa1875cfcec31 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 29 Nov 2021 14:03:50 +0100 Subject: [PATCH 4/4] unknown, not any --- packages/jest-worker/src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-worker/src/types.ts b/packages/jest-worker/src/types.ts index f57edd6b261f..d1a44840cfe7 100644 --- a/packages/jest-worker/src/types.ts +++ b/packages/jest-worker/src/types.ts @@ -125,7 +125,7 @@ export type WorkerOptions = { setupArgs: Array; maxRetries: number; workerId: number; - workerData?: any; + workerData?: unknown; workerPath: string; };