Skip to content

Commit d7b97a2

Browse files
committed
test_runner: pass signal on timeout
1 parent 389b7e1 commit d7b97a2

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

lib/internal/test_runner/test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,9 @@ class Test extends AsyncResource {
413413

414414
this.pass();
415415
} catch (err) {
416-
if (err?.code === 'ERR_TEST_FAILURE' && kIsNodeError in err) {
416+
if (err?.code === 'ERR_TEST_FAILURE' && kIsNodeError in err && err.failureType === kTestTimeoutFailure) {
417+
this.cancel(err);
418+
} else if (err?.code === 'ERR_TEST_FAILURE' && kIsNodeError in err) {
417419
this.fail(err);
418420
} else {
419421
this.fail(new ERR_TEST_FAILURE(err, kTestCodeFailure));

test/parallel/test-runner-misc.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('assert');
4+
const { spawnSync } = require('child_process');
5+
const { setTimeout } = require('timers/promises');
6+
7+
if (process.argv[2] === 'child') {
8+
const test = require('node:test');
9+
10+
if (process.argv[3] === 'abortSignal') {
11+
assert.throws(() => test({ signal: {} }), {
12+
code: 'ERR_INVALID_ARG_TYPE',
13+
name: 'TypeError'
14+
});
15+
16+
let testSignal;
17+
test({ timeout: 10 }, common.mustCall(async ({ signal }) => {
18+
assert.strictEqual(signal.aborted, false);
19+
testSignal = signal;
20+
await setTimeout(50);
21+
})).then(() => {
22+
test(() => assert.strictEqual(testSignal.aborted, true));
23+
});
24+
} else assert.fail('unreachable');
25+
} else {
26+
const child = spawnSync(process.execPath, [__filename, 'child', 'abortSignal']);
27+
const stdout = child.stdout.toString();
28+
assert.strictEqual(child.status, 1);
29+
assert.strictEqual(child.signal, null);
30+
assert.match(stdout, /# pass 1/);
31+
assert.match(stdout, /# fail 0/);
32+
assert.match(stdout, /# cancelled 1/);
33+
}

0 commit comments

Comments
 (0)