Skip to content

Commit 012acb0

Browse files
committed
feat: verbous error when entire test tree is canceled
PR-URL: nodejs/node#44060 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> (cherry picked from commit 8cf33850bea691d8c53b2d4175c959c8549aa76c)
1 parent 9b04919 commit 012acb0

File tree

4 files changed

+13
-20
lines changed

4 files changed

+13
-20
lines changed

lib/internal/test_runner/harness.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// https://github.com/nodejs/node/blob/659dc126932f986fc33c7f1c878cb2b57a1e2fac/lib/internal/test_runner/harness.js
1+
// https://github.com/nodejs/node/blob/8cf33850bea691d8c53b2d4175c959c8549aa76c/lib/internal/test_runner/harness.js
22
'use strict'
33
const {
44
ArrayPrototypeForEach,
@@ -15,7 +15,7 @@ const {
1515
}
1616
} = require('#internal/errors')
1717
const { getOptionValue } = require('#internal/options')
18-
const { Test, ItTest, Suite } = require('#internal/test_runner/test')
18+
const { kCancelledByParent, Test, ItTest, Suite } = require('#internal/test_runner/test')
1919

2020
const isTestRunner = getOptionValue('--test')
2121
const testResources = new SafeMap()
@@ -80,7 +80,9 @@ function setup (root) {
8080
createProcessEventHandler('unhandledRejection', root)
8181

8282
const exitHandler = () => {
83-
root.postRun()
83+
root.postRun(new ERR_TEST_FAILURE(
84+
'Promise resolution is still pending but the event loop has already resolved',
85+
kCancelledByParent))
8486

8587
let passCount = 0
8688
let failCount = 0

lib/internal/test_runner/test.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ class Test extends AsyncResource {
513513
this.postRun()
514514
}
515515

516-
postRun () {
516+
postRun (pendingSubtestsError) {
517517
let failedSubtests = 0
518518

519519
// If the test was failed before it even started, then the end time will
@@ -530,8 +530,8 @@ class Test extends AsyncResource {
530530
const subtest = this.subtests[i]
531531

532532
if (!subtest.finished) {
533-
subtest.cancel()
534-
subtest.postRun()
533+
subtest.cancel(pendingSubtestsError)
534+
subtest.postRun(pendingSubtestsError)
535535
}
536536

537537
if (!subtest.passed) {
@@ -694,13 +694,4 @@ class Suite extends Test {
694694
}
695695
}
696696

697-
module.exports = {
698-
ItTest,
699-
kCancelledByParent,
700-
kDefaultIndent,
701-
kHookFailure,
702-
kSubtestsFailed,
703-
kTestCodeFailure,
704-
Suite,
705-
Test
706-
}
697+
module.exports = { kCancelledByParent, kDefaultIndent, kSubtestsFailed, kTestCodeFailure, Test, Suite, ItTest }

test/message/test_runner_no_refs.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ TAP version 13
55
---
66
duration_ms: *
77
failureType: 'cancelledByParent'
8-
error: 'test did not finish before its parent and was cancelled'
8+
error: 'Promise resolution is still pending but the event loop has already resolved'
99
code: 'ERR_TEST_FAILURE'
1010
stack: |-
1111
*
@@ -15,7 +15,7 @@ not ok 1 - does not keep event loop alive
1515
---
1616
duration_ms: *
1717
failureType: 'cancelledByParent'
18-
error: 'test did not finish before its parent and was cancelled'
18+
error: 'Promise resolution is still pending but the event loop has already resolved'
1919
code: 'ERR_TEST_FAILURE'
2020
stack: |-
2121
*

test/message/test_runner_unresolved_promise.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ not ok 2 - never resolving promise
99
---
1010
duration_ms: *
1111
failureType: 'cancelledByParent'
12-
error: 'test did not finish before its parent and was cancelled'
12+
error: 'Promise resolution is still pending but the event loop has already resolved'
1313
code: 'ERR_TEST_FAILURE'
1414
stack: |-
1515
*
@@ -19,7 +19,7 @@ not ok 3 - fail
1919
---
2020
duration_ms: 0
2121
failureType: 'cancelledByParent'
22-
error: 'test did not finish before its parent and was cancelled'
22+
error: 'Promise resolution is still pending but the event loop has already resolved'
2323
code: 'ERR_TEST_FAILURE'
2424
stack: |-
2525
*

0 commit comments

Comments
 (0)