diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js index 733a745a494162..ea1a5a5c9bf585 100644 --- a/lib/internal/test_runner/runner.js +++ b/lib/internal/test_runner/runner.js @@ -797,6 +797,7 @@ function run(options = kEmptyObject) { finishBootstrap(); root.processPendingSubtests(); }; + teardown = () => root.harness.teardown(); } } diff --git a/test/parallel/test-runner-run.mjs b/test/parallel/test-runner-run.mjs index 29b39049c1af0f..7e96694e307ec5 100644 --- a/test/parallel/test-runner-run.mjs +++ b/test/parallel/test-runner-run.mjs @@ -629,6 +629,41 @@ describe('require(\'node:test\').run', { concurrency: true }, () => { assert.strictEqual(diagnostics.includes(entry), true); } }); + + it('should report immediately without waiting for beforeExit event when isolation is none', (t) => { + t.plan(1, { wait: 5_000 }); + const events = []; + const expectedEvents = [ + 'test:enqueue', + 'test:dequeue', + 'test:complete', + 'test:start', + 'test:pass', + 'test:plan', + 'test:diagnostic', + 'test:diagnostic', + 'test:diagnostic', + 'test:diagnostic', + 'test:diagnostic', + 'test:diagnostic', + 'test:diagnostic', + 'test:diagnostic', + 'test:summary', + ]; + + const stream = run({ + isolation: 'none', + files: [fixtures.path('test-runner', 'default-behavior', 'index.test.js')], + }); + + stream.on('data', (event) => { + events.push(event); + }); + + stream.on('end', () => { + t.assert.deepStrictEqual(events.map(({ type }) => type), expectedEvents); + }); + }); }); describe('forceExit', () => {