Skip to content

Commit 96c5509

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

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

lib/internal/test_runner/test.js

+3-1
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

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
test({ timeout: 10 }, common.mustCall(async ({ signal }) => {
17+
assert.strictEqual(signal.aborted, false);
18+
await setTimeout(50);
19+
assert.strictEqual(signal.aborted, true);
20+
}));
21+
} else assert.fail('unreachable');
22+
} else {
23+
const child = spawnSync(process.execPath, [__filename, 'child', 'abortSignal']);
24+
const stdout = child.stdout.toString();
25+
assert.strictEqual(child.status, 1);
26+
assert.strictEqual(child.signal, null);
27+
assert.match(stdout, /# pass 0/);
28+
assert.match(stdout, /# fail 0/);
29+
assert.match(stdout, /# cancelled 1/);
30+
}

0 commit comments

Comments
 (0)