// Runs jest with the arguments it is given, and fails the run when jest had to // force-stop the worker process that ran a test file. Jest itself only prints a // warning when that happens, and its run still passes. The warning means a test // left a timer or another open handle running. The test scripts in package.json // run jest through this file. // // Jest runs inside this process and writes to the terminal directly, so its // output looks the same as a plain jest run. This file only checks each write // to stderr for the warning below. "use strict"; // The start of the warning that jest prints on stderr after it force-stops a // worker process. const WORKER_WARNING = "A worker process has failed to exit gracefully"; let forceStopped = false; const writeStderr = process.stderr.write.bind(process.stderr); process.stderr.write = (chunk, ...rest) => { if (String(chunk).includes(WORKER_WARNING)) { forceStopped = true; } return writeStderr(chunk, ...rest); }; // Runs after jest has finished, as the process exits. process.on("exit", () => { if (forceStopped) { console.error( "script/lib/jest.js: failing the run, because jest force-stopped " + "a worker process. A test left a timer or another open " + "handle running.", ); process.exitCode = 1; } }); // Jest's own command-line program. It reads its arguments from process.argv. require("jest/bin/jest");