diff --git a/lib/internal/test_runner/test.js b/lib/internal/test_runner/test.js index 1f888bc6277e27..ee780e9a8e950c 100644 --- a/lib/internal/test_runner/test.js +++ b/lib/internal/test_runner/test.js @@ -477,7 +477,6 @@ class Test extends AsyncResource { this.parent.addPendingSubtest(deferred); return deferred.promise; } - return this.run(); } @@ -525,11 +524,7 @@ class Test extends AsyncResource { } const { args, ctx } = this.getRunArgs(); - const after = runOnce(async () => { - if (this.hooks.after.length > 0) { - await this.runHook('after', { args, ctx }); - } - }); + const afterEach = runOnce(async () => { if (this.parent?.hooks.afterEach.length > 0) { await this.parent.runHook('afterEach', { args, ctx }); @@ -537,12 +532,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,11 +569,17 @@ class Test extends AsyncResource { return; } - await after(); await afterEach(); + if (this.hooks.after.length > 0) { + await this.runHook('after', this.getRunArgs()); + } this.pass(); } catch (err) { - try { await after(); } catch { /* Ignore error. */ } + try { + if (this.hooks.after.length > 0) { + await this.runHook('after', this.getRunArgs()); + } + } catch { /* Ignore error. */ } try { await afterEach(); } catch { /* test is already failing, let's ignore the error */ } if (isTestFailureError(err)) { if (err.failureType === kTestTimeoutFailure) { diff --git a/test/fixtures/test-runner/output/hooks.js b/test/fixtures/test-runner/output/hooks.js index 30532a29ad69f4..a69506bbda5ef7 100644 --- a/test/fixtures/test-runner/output/hooks.js +++ b/test/fixtures/test-runner/output/hooks.js @@ -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', ]); });