Version
21.6.1
Platform
darwin
Subsystem
test runner
What steps will reproduce the bug?
Create a file called hooks.mjs containing:
import { describe, afterEach, after, it } from 'node:test';
describe('parent', () => {
afterEach(() => console.log('parent after each'));
after(() => console.log('parent after'));
describe('child', () => {
afterEach(() => console.log('child after each'));
after(() => console.log('child after'));
it('works', () => {});
});
});
and run node --test hooks.mjs.
How often does it reproduce? Is there a required condition?
Always
What is the expected behavior? Why is that the expected behavior?
child after each
parent after each
child after
parent after
<test results>
As with mocha, qunit, jest, vitest, and probably others, a child suite's afterEach hooks should be called before those of parent suites, not after them. Also, the execution order of parent/child afterEach hooks should match the order of parent/child after hooks.
Currently, after hooks correctly run child-first, but afterEach hooks run incorrectly parent-first.
What do you see instead?
parent after each
child after each
child after
parent after
<test results>
Additional information
This also reproduces with the test()/subtest API -- a test's afterEach hook will run before a subtest's afterEach hook.
Version
21.6.1
Platform
darwin
Subsystem
test runner
What steps will reproduce the bug?
Create a file called
hooks.mjscontaining:and run
node --test hooks.mjs.How often does it reproduce? Is there a required condition?
Always
What is the expected behavior? Why is that the expected behavior?
As with
mocha,qunit,jest,vitest, and probably others, a child suite'safterEachhooks should be called before those of parent suites, not after them. Also, the execution order of parent/childafterEachhooks should match the order of parent/childafterhooks.Currently,
afterhooks correctly run child-first, butafterEachhooks run incorrectly parent-first.What do you see instead?
Additional information
This also reproduces with the
test()/subtest API -- a test'safterEachhook will run before a subtest'safterEachhook.