// Runs jest with the arguments it is given, and fails the run when jest had to // force-stop a worker. 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. "use strict"; const { spawn } = require("child_process"); // The start of the warning that jest prints on stderr after it force-stops a // worker. const WORKER_WARNING = "A worker process has failed to exit gracefully"; const jest = spawn("jest", process.argv.slice(2), { stdio: ["inherit", "inherit", "pipe"], }); let stderr = ""; jest.stderr.on("data", (chunk) => { process.stderr.write(chunk); stderr += chunk; }); jest.on("close", (code) => { if (stderr.includes(WORKER_WARNING)) { console.error( "script/lib/jest.js: failing the run, because jest force-stopped " + "a worker. A test left a timer or another open handle running.", ); process.exit(1); } process.exit(code ?? 1); });