mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
test_runner: fix ordering of test hooks
For tests with subtests the before hook was being run after the beforeEach hook, which is the opposite to test suites and expectations. Also, a function was being used to close over the after hooks, but at the point it was being run the after hooks were not yet set up. Fixes #47915 PR-URL: https://github.com/nodejs/node/pull/47931 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
@@ -537,12 +537,12 @@ class Test extends AsyncResource {
|
||||
});
|
||||
|
||||
try {
|
||||
if (this.parent?.hooks.beforeEach.length > 0) {
|
||||
await this.parent.runHook('beforeEach', { args, ctx });
|
||||
}
|
||||
if (this.parent?.hooks.before.length > 0) {
|
||||
await this.parent.runHook('before', this.parent.getRunArgs());
|
||||
}
|
||||
if (this.parent?.hooks.beforeEach.length > 0) {
|
||||
await this.parent.runHook('beforeEach', { args, ctx });
|
||||
}
|
||||
const stopPromise = stopTest(this.timeout, this.signal);
|
||||
const runArgs = ArrayPrototypeSlice(args);
|
||||
ArrayPrototypeUnshift(runArgs, this.fn, ctx);
|
||||
@@ -574,8 +574,8 @@ class Test extends AsyncResource {
|
||||
return;
|
||||
}
|
||||
|
||||
await after();
|
||||
await afterEach();
|
||||
await after();
|
||||
this.pass();
|
||||
} catch (err) {
|
||||
try { await after(); } catch { /* Ignore error. */ }
|
||||
|
||||
7
test/fixtures/test-runner/output/hooks.js
vendored
7
test/fixtures/test-runner/output/hooks.js
vendored
@@ -99,6 +99,8 @@ test('test hooks', async (t) => {
|
||||
await t.test('2', () => testArr.push('2'));
|
||||
|
||||
await t.test('nested', async (t) => {
|
||||
t.before((t) => testArr.push('nested before ' + t.name));
|
||||
t.after((t) => testArr.push('nested after ' + t.name));
|
||||
t.beforeEach((t) => testArr.push('nested beforeEach ' + t.name));
|
||||
t.afterEach((t) => testArr.push('nested afterEach ' + t.name));
|
||||
await t.test('nested 1', () => testArr.push('nested1'));
|
||||
@@ -106,12 +108,15 @@ test('test hooks', async (t) => {
|
||||
});
|
||||
|
||||
assert.deepStrictEqual(testArr, [
|
||||
'beforeEach 1', 'before test hooks', '1', 'afterEach 1',
|
||||
'before test hooks',
|
||||
'beforeEach 1', '1', 'afterEach 1',
|
||||
'beforeEach 2', '2', 'afterEach 2',
|
||||
'beforeEach nested',
|
||||
'nested before nested',
|
||||
'beforeEach nested 1', 'nested beforeEach nested 1', 'nested1', 'afterEach nested 1', 'nested afterEach nested 1',
|
||||
'beforeEach nested 2', 'nested beforeEach nested 2', 'nested 2', 'afterEach nested 2', 'nested afterEach nested 2',
|
||||
'afterEach nested',
|
||||
'nested after nested',
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user