diff --git a/src/env/node.js b/src/env/node.js index 9791f49..234616f 100644 --- a/src/env/node.js +++ b/src/env/node.js @@ -391,7 +391,7 @@ export default { console[root.stats.fail > 0 ? "error" : "log"](tree); - process.exit(root.stats.fail > 0 ? 1 : 0); + process.exitCode = root.stats.fail > 0 ? 1 : 0; } return; } diff --git a/tests/run.js b/tests/run.js index 1d1c532..39fca28 100644 --- a/tests/run.js +++ b/tests/run.js @@ -20,10 +20,36 @@ export default { }, { name: "run() returning a promise", - run: () => new Promise(resolve => setInterval(() => resolve("foo"), 100)), + run: () => new Promise(resolve => setTimeout(() => resolve("foo"), 100)), }, ], }, + { + name: "afterAll runs in --ci mode (issue #168)", + skip: typeof globalThis.process === "undefined", + async run () { + let { spawnSync } = await import("node:child_process"); + let { writeFileSync, rmSync } = await import("node:fs"); + let { tmpdir } = await import("node:os"); + let { join } = await import("node:path"); + + let fixture = join(tmpdir(), "htest-168.js"); + writeFileSync( + fixture, + `export default { async afterAll () { await new Promise(r => setTimeout(r, 50)); process.stderr.write("[test] afterAll ran"); }, tests: [{ run: () => 1, expect: 1 }] };`, + ); + + let { stderr } = spawnSync( + process.execPath, + [join(process.cwd(), "bin/htest.js"), fixture, "--ci"], + { encoding: "utf8" }, + ); + rmSync(fixture); + + return stderr.includes("[test] afterAll ran"); + }, + expect: true, + }, { name: "Aborting", tests: [