Skip to content

Commit 20a01fc

Browse files
cjihrigtargos
authored andcommitted
test_runner: run after hooks even if test is aborted
If a test is run, but aborted, any after hooks should still be run, as they may need to perform cleanup. PR-URL: #54151 Reviewed-By: Chemi Atlow <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Jake Yuesong Li <[email protected]> Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Raz Luvaton <[email protected]>
1 parent 11fdaa6 commit 20a01fc

File tree

4 files changed

+40
-8
lines changed

4 files changed

+40
-8
lines changed

lib/internal/test_runner/test.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -763,10 +763,7 @@ class Test extends AsyncResource {
763763
}
764764

765765
[kShouldAbort]() {
766-
if (this.signal.aborted) {
767-
return true;
768-
}
769-
if (this.outerSignal?.aborted) {
766+
if (this.signal.aborted || this.outerSignal?.aborted) {
770767
this.#abortHandler();
771768
return true;
772769
}
@@ -866,10 +863,7 @@ class Test extends AsyncResource {
866863
await SafePromiseRace([PromiseResolve(promise), stopPromise]);
867864
}
868865

869-
if (this[kShouldAbort]()) {
870-
this.postRun();
871-
return;
872-
}
866+
this[kShouldAbort]();
873867
this.plan?.check();
874868
this.pass();
875869
await afterEach();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
'use strict';
2+
const { test } = require('node:test');
3+
4+
test('test that aborts', (t, done) => {
5+
t.after(() => {
6+
// This should still run.
7+
console.log('AFTER');
8+
});
9+
10+
setImmediate(() => {
11+
// This creates an uncaughtException, which aborts the test.
12+
throw new Error('boom');
13+
});
14+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
TAP version 13
2+
AFTER
3+
# Subtest: test that aborts
4+
not ok 1 - test that aborts
5+
---
6+
duration_ms: *
7+
location: '/test/fixtures/test-runner/output/abort-runs-after-hook.js:(LINE):1'
8+
failureType: 'uncaughtException'
9+
error: 'boom'
10+
code: 'ERR_TEST_FAILURE'
11+
stack: |-
12+
*
13+
*
14+
...
15+
1..1
16+
# tests 1
17+
# suites 0
18+
# pass 0
19+
# fail 1
20+
# cancelled 0
21+
# skipped 0
22+
# todo 0
23+
# duration_ms *

test/parallel/test-runner-output.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ const lcovTransform = snapshot.transform(
9393

9494
const tests = [
9595
{ name: 'test-runner/output/abort.js' },
96+
{ name: 'test-runner/output/abort-runs-after-hook.js' },
9697
{ name: 'test-runner/output/abort_suite.js' },
9798
{ name: 'test-runner/output/abort_hooks.js' },
9899
{ name: 'test-runner/output/describe_it.js' },

0 commit comments

Comments
 (0)