test: replace jest workers past 200 MB so they exit in time (closes #766) #774

Merged
clawbot merged 1 commits from issue-766-run-tests-in-band into next 2026-11-11 09:37:13 +01:00
4 changed files with 45 additions and 3 deletions

No files matched your search

+7 -2
View File
@@ -135,9 +135,14 @@ module.exports = [
},
},
// Unit tests, and the helpers they require: jest on node.
// Unit tests, the helpers they require, and the test files they hand to
// jest: jest on node.
{
files: ["tests/**/*.test.js", "tests/support/**/*.js"],
files: [
"tests/**/*.test.js",
"tests/support/**/*.js",
"tests/fixtures/**/*.js",
],
languageOptions: {
...commonjs,
globals: { ...globals.node, ...globals.jest },
+2 -1
View File
@@ -16,7 +16,8 @@
"jest": {
"setupFiles": [
"<rootDir>/tests/support/navigatorLocks.js"
]
],
"workerIdleMemoryLimit": "200MB"
},
"devDependencies": {
"@eslint/js": "10.0.1",
+7
View File
@@ -0,0 +1,7 @@
// A test file that starts an interval and never clears it.
// tests/jestRunner.test.js runs script/lib/jest.js on this file alone. The
// name does not end in .test.js, so the normal run never picks it up.
test("starts an interval and never clears it", () => {
setInterval(() => {}, 1000);
});
+29
View File
@@ -0,0 +1,29 @@
// script/lib/jest.js, which package.json's test scripts run, fails a run in
// which jest force-stopped a worker process because a test left an open
// handle.
const { spawnSync } = require("child_process");
const path = require("path");
const root = path.join(__dirname, "..");
test("a test that leaves an interval running fails the run", () => {
// The memory limit in package.json makes jest run even this one file in a
// worker process. The interval keeps that worker from exiting, so jest
// force-stops it after the run.
const result = spawnSync(
process.execPath,
[
"script/lib/jest.js",
"--maxWorkers=1",
"--testMatch",
"<rootDir>/tests/fixtures/leavesIntervalRunning.js",
],
{ cwd: root, encoding: "utf8", timeout: 20000 },
);
expect(result.signal).toBeNull();
expect(result.status).toBe(1);
expect(result.stderr).toContain("1 passed");
expect(result.stderr).toContain("jest force-stopped a worker process");
});