Version
v24.9.0
Platform
Linux home 5.15.0-153-generic #163-Ubuntu SMP Thu Aug 7 16:37:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Subsystem
No response
What steps will reproduce the bug?
runner.js
importclusterfrom'node:cluster';import{run}from"node:test";if(cluster.isPrimary){cluster.fork();}else{conststream=run({isolation: "none",});stream.on("data",(data)=>{console.log("on data",data.type);});stream.on("end",()=>{console.log("on end")process.exit(0);});stream.on("error",(err)=>{console.log("on error",err);});}dummy.test.js
import{describe,it}from"node:test";import*asassertfrom"node:assert";describe("suite",()=>{it("works",()=>{assert.ok(true);});});How often does it reproduce? Is there a required condition?
Always. No.
What is the expected behavior? Why is that the expected behavior?
With isolation: "process" (the default), here's the output:
on data test:enqueue
on data test:dequeue
on data test:enqueue
on data test:dequeue
on data test:enqueue
on data test:dequeue
on data test:complete
on data test:start
on data test:start
on data test:pass
on data test:complete
on data test:plan
on data test:pass
on data test:summary
on data test:complete
on data test:plan
on data test:diagnostic
on data test:diagnostic
on data test:diagnostic
on data test:diagnostic
on data test:diagnostic
on data test:diagnostic
on data test:diagnostic
on data test:diagnostic
on data test:summary
on end
Process finished with exit code 0
The process cleanly exits at the end of the tests.
What do you see instead?
With isolation: "none", here's the output:
on data test:enqueue
on data test:dequeue
on data test:enqueue
on data test:dequeue
on data test:complete
on data test:start
on data test:start
on data test:pass
on data test:complete
on data test:plan
on data test:pass
And the process hangs.
Additional information
The goal was to use the "cluster" module to run the tests in parallel with the shard option:
import{run}from"node:test";import{spec}from"node:test/reporters";import{PassThrough}from"node:stream";import{availableParallelism}from"node:os";importclusterfrom'node:cluster';constconcurrency=availableParallelism();letcompleted=0;if(cluster.isPrimary){constmergedStream=newPassThrough({objectMode: true});cluster.on("message",(_worker,message)=>{mergedStream.emit("data",message);});mergedStream.compose(spec).pipe(process.stdout);for(leti=1;i<=concurrency;i++){cluster.fork({SHARD_INDEX: i,SHARD_TOTAL: concurrency,});}cluster.on("exit",(worker,code,signal)=>{if(++completed===concurrency){mergedStream.end();}});}else{conststream=run({isolation: "none",shard: {index: parseInt(process.env.SHARD_INDEX,10),total: parseInt(process.env.SHARD_TOTAL,10),},});stream.on("data",(chunk)=>{process.send(chunk);});}Related: #55939
Version
v24.9.0
Platform
Subsystem
No response
What steps will reproduce the bug?
runner.js
dummy.test.js
How often does it reproduce? Is there a required condition?
Always. No.
What is the expected behavior? Why is that the expected behavior?
With
isolation: "process"(the default), here's the output:The process cleanly exits at the end of the tests.
What do you see instead?
With
isolation: "none", here's the output:And the process hangs.
Additional information
The goal was to use the "cluster" module to run the tests in parallel with the
shardoption:Related: #55939