diff --git a/lib/internal/test_runner/test.js b/lib/internal/test_runner/test.js index 2e241d9f0eef7b..c0a3e4ff5c402d 100644 --- a/lib/internal/test_runner/test.js +++ b/lib/internal/test_runner/test.js @@ -1,6 +1,7 @@ 'use strict'; const { ArrayPrototypePush, + ArrayPrototypePushApply, ArrayPrototypeReduce, ArrayPrototypeShift, ArrayPrototypeSlice, @@ -760,8 +761,10 @@ class Suite extends Test { try { const { ctx, args } = this.getRunArgs(); + const runArgs = [this.fn, ctx]; + ArrayPrototypePushApply(runArgs, args); this.buildSuite = PromisePrototypeThen( - PromiseResolve(this.runInAsyncScope(this.fn, ctx, args)), + PromiseResolve(ReflectApply(this.runInAsyncScope, this, runArgs)), undefined, (err) => { this.fail(new ERR_TEST_FAILURE(err, kTestCodeFailure)); diff --git a/test/fixtures/test-runner/output/abort_suite.snapshot b/test/fixtures/test-runner/output/abort_suite.snapshot index 995e8512218bdb..e2abdadaf5a4b7 100644 --- a/test/fixtures/test-runner/output/abort_suite.snapshot +++ b/test/fixtures/test-runner/output/abort_suite.snapshot @@ -40,25 +40,61 @@ TAP version 13 not ok 7 - not ok 3 --- duration_ms: ZERO - failureType: 'cancelledByParent' - error: 'test did not finish before its parent and was cancelled' - code: 'ERR_TEST_FAILURE' + failureType: 'testAborted' + error: 'This operation was aborted' + code: 20 + name: 'AbortError' + stack: |- + * + * + * + * + * + * + * + * + * + * ... # Subtest: not ok 4 not ok 8 - not ok 4 --- duration_ms: ZERO - failureType: 'cancelledByParent' - error: 'test did not finish before its parent and was cancelled' - code: 'ERR_TEST_FAILURE' + failureType: 'testAborted' + error: 'This operation was aborted' + code: 20 + name: 'AbortError' + stack: |- + * + * + * + * + * + * + * + * + * + * ... # Subtest: not ok 5 not ok 9 - not ok 5 --- duration_ms: ZERO - failureType: 'cancelledByParent' - error: 'test did not finish before its parent and was cancelled' - code: 'ERR_TEST_FAILURE' + failureType: 'testAborted' + error: 'This operation was aborted' + code: 20 + name: 'AbortError' + stack: |- + * + * + * + * + * + * + * + * + * + * ... 1..9 not ok 1 - describe timeout signal diff --git a/test/parallel/test-runner-misc.js b/test/parallel/test-runner-misc.js index 34abaf5c120be3..abc2715dcfba48 100644 --- a/test/parallel/test-runner-misc.js +++ b/test/parallel/test-runner-misc.js @@ -21,11 +21,19 @@ if (process.argv[2] === 'child') { })).finally(common.mustCall(() => { test(() => assert.strictEqual(testSignal.aborted, true)); })); + + // TODO(benjamingr) add more tests to describe + AbortSignal + // this just tests the parameter is passed + test.describe('Abort Signal in describe', common.mustCall(({ signal }) => { + test.it('Supports AbortSignal', () => { + assert.strictEqual(signal.aborted, false); + }); + })); } else assert.fail('unreachable'); } else { const child = spawnSync(process.execPath, [__filename, 'child', 'abortSignal']); const stdout = child.stdout.toString(); - assert.match(stdout, /^# pass 1$/m); + assert.match(stdout, /^# pass 2$/m); assert.match(stdout, /^# fail 0$/m); assert.match(stdout, /^# cancelled 1$/m); assert.strictEqual(child.status, 1);