diff --git a/CHANGELOG.md b/CHANGELOG.md index 46bf47a8d1f4..15e930742645 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - `[jest-core, jest-circus, jest-reporter, jest-runner]` Added support for reporting individual test cases using jest-circus ([#10227](https://github.com/facebook/jest/pull/10227)) - `[jest-config, jest-reporter, jest-runner, jest-test-sequencer]` Add `slowTestThreshold` configuration option ([#9366](https://github.com/facebook/jest/pull/9366)) - `[jest-worker]` Added support for workers to send custom messages to parent in jest-worker ([#10293](https://github.com/facebook/jest/pull/10293)) +- `[jest-worker]` Support passing `resourceLimits` ([#10335](https://github.com/facebook/jest/pull/10335)) - `[pretty-format]` Added support for serializing custom elements (web components) ([#10217](https://github.com/facebook/jest/pull/10237)) ### Fixes diff --git a/packages/jest-worker/src/base/BaseWorkerPool.ts b/packages/jest-worker/src/base/BaseWorkerPool.ts index 9538a603cf8b..a92e383dc50e 100644 --- a/packages/jest-worker/src/base/BaseWorkerPool.ts +++ b/packages/jest-worker/src/base/BaseWorkerPool.ts @@ -40,12 +40,13 @@ export default class BaseWorkerPool { const stdout = mergeStream(); const stderr = mergeStream(); - const {forkOptions, maxRetries, setupArgs} = options; + const {forkOptions, maxRetries, resourceLimits, setupArgs} = options; for (let i = 0; i < options.numWorkers; i++) { const workerOptions: WorkerOptions = { forkOptions, maxRetries, + resourceLimits, setupArgs, workerId: i, workerPath, diff --git a/packages/jest-worker/src/index.ts b/packages/jest-worker/src/index.ts index 7bc79e1c736a..f9f9b3bccd8a 100644 --- a/packages/jest-worker/src/index.ts +++ b/packages/jest-worker/src/index.ts @@ -76,11 +76,12 @@ export default class JestWorker { this._ending = false; const workerPoolOptions: WorkerPoolOptions = { - enableWorkerThreads: this._options.enableWorkerThreads || false, - forkOptions: this._options.forkOptions || {}, - maxRetries: this._options.maxRetries || 3, - numWorkers: this._options.numWorkers || Math.max(cpus().length - 1, 1), - setupArgs: this._options.setupArgs || [], + enableWorkerThreads: this._options.enableWorkerThreads ?? false, + forkOptions: this._options.forkOptions ?? {}, + maxRetries: this._options.maxRetries ?? 3, + numWorkers: this._options.numWorkers ?? Math.max(cpus().length - 1, 1), + resourceLimits: this._options.resourceLimits ?? {}, + setupArgs: this._options.setupArgs ?? [], }; if (this._options.WorkerPool) { diff --git a/packages/jest-worker/src/types.ts b/packages/jest-worker/src/types.ts index 23421d6a8306..5242ec0f2c97 100644 --- a/packages/jest-worker/src/types.ts +++ b/packages/jest-worker/src/types.ts @@ -7,6 +7,7 @@ import type {EventEmitter} from 'events'; import type {ForkOptions} from 'child_process'; +import type {ResourceLimits} from 'worker_threads'; // Because of the dynamic nature of a worker communication process, all messages // coming from any of the other processes cannot be typed. Thus, many types @@ -65,12 +66,13 @@ export interface PromiseWithCustomMessage extends Promise { // Option objects. -export type {ForkOptions}; +export type {ForkOptions, ResourceLimits}; export type FarmOptions = { computeWorkerKey?: (method: string, ...args: Array) => string | null; exposedMethods?: ReadonlyArray; forkOptions?: ForkOptions; + resourceLimits?: ResourceLimits; setupArgs?: Array; maxRetries?: number; numWorkers?: number; @@ -84,6 +86,7 @@ export type FarmOptions = { export type WorkerPoolOptions = { setupArgs: Array; forkOptions: ForkOptions; + resourceLimits: ResourceLimits; maxRetries: number; numWorkers: number; enableWorkerThreads: boolean; @@ -91,6 +94,7 @@ export type WorkerPoolOptions = { export type WorkerOptions = { forkOptions: ForkOptions; + resourceLimits: ResourceLimits; setupArgs: Array; maxRetries: number; workerId: number; diff --git a/packages/jest-worker/src/workers/NodeThreadsWorker.ts b/packages/jest-worker/src/workers/NodeThreadsWorker.ts index 57a71ef1ec39..ab964d1730e4 100644 --- a/packages/jest-worker/src/workers/NodeThreadsWorker.ts +++ b/packages/jest-worker/src/workers/NodeThreadsWorker.ts @@ -62,6 +62,7 @@ export default class ExperimentalWorker implements WorkerInterface { initialize(): void { this._worker = new Worker(path.resolve(__dirname, './threadChild.js'), { eval: false, + resourceLimits: this._options.resourceLimits, stderr: true, stdout: true, workerData: {