Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit fd8be14

Browse filesBrowse files
MoLowaduh95
authored andcommitted
test_runner: fix passing expectFailure
PR-URL: #61568 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Pietro Marchini <pietro.marchini94@gmail.com> Reviewed-By: Jordan Harband <ljharb@gmail.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
1 parent 0ef99de commit fd8be14
Copy full SHA for fd8be14

3 files changed

+42Lines changed: 42 additions & 0 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎lib/internal/test_runner/test.js‎

Copy file name to clipboardExpand all lines: lib/internal/test_runner/test.js
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ const kParentAlreadyFinished = 'parentAlreadyFinished';
8282
const kSubtestsFailed = 'subtestsFailed';
8383
const kTestCodeFailure = 'testCodeFailure';
8484
const kTestTimeoutFailure = 'testTimeoutFailure';
85+
const kExpectedFailure = 'expectedFailure';
8586
const kHookFailure = 'hookFailed';
8687
const kDefaultTimeout = null;
8788
const noop = FunctionPrototype;
@@ -957,6 +958,14 @@ class Test extends AsyncResource {
957958
}
958959

959960
pass() {
961+
if (this.error == null && this.expectFailure === true && !this.skipped) {
962+
this.passed = false;
963+
this.error = new ERR_TEST_FAILURE(
964+
'test was expected to fail but passed',
965+
kExpectedFailure,
966+
);
967+
return;
968+
}
960969
if (this.error !== null) {
961970
return;
962971
}
Collapse file
+18Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('node:assert');
4+
const { run, test } = require('node:test');
5+
6+
if (!process.env.NODE_TEST_CONTEXT) {
7+
const stream = run({ files: [__filename] });
8+
9+
stream.on('test:pass', common.mustNotCall());
10+
stream.on('test:fail', common.mustCall((event) => {
11+
assert.strictEqual(event.expectFailure, true);
12+
assert.strictEqual(event.details.error.code, 'ERR_TEST_FAILURE');
13+
assert.strictEqual(event.details.error.failureType, 'expectedFailure');
14+
assert.strictEqual(event.details.error.cause, 'test was expected to fail but passed');
15+
}, 1));
16+
} else {
17+
test('passing test', { expectFailure: true }, () => {});
18+
}
Collapse file
+15Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('node:assert');
4+
const { run, test } = require('node:test');
5+
6+
if (!process.env.NODE_TEST_CONTEXT) {
7+
const stream = run({ files: [__filename] });
8+
9+
stream.on('test:fail', common.mustNotCall());
10+
stream.on('test:pass', common.mustCall((event) => {
11+
assert.strictEqual(event.expectFailure, true);
12+
}, 1));
13+
} else {
14+
test('failing test', { expectFailure: true }, () => assert.fail('should not pass'));
15+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.