test_runner: fix passing expectFailure

PR-URL: https://github.com/nodejs/node/pull/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>
This commit is contained in:
Moshe Atlow authored and GitHub committed 2026-01-30 17:41:45 +00:00
1 parent 3fbb8b7efc
commit ea83d326f7
3 files changed
+42

No files matched your search

+9
View File
@@ -82,6 +82,7 @@ const kParentAlreadyFinished = 'parentAlreadyFinished';
const kSubtestsFailed = 'subtestsFailed';
const kTestCodeFailure = 'testCodeFailure';
const kTestTimeoutFailure = 'testTimeoutFailure';
const kExpectedFailure = 'expectedFailure';
const kHookFailure = 'hookFailed';
const kDefaultTimeout = null;
const noop = FunctionPrototype;
@@ -957,6 +958,14 @@ class Test extends AsyncResource {
}
pass() {
if (this.error == null && this.expectFailure === true && !this.skipped) {
this.passed = false;
this.error = new ERR_TEST_FAILURE(
'test was expected to fail but passed',
kExpectedFailure,
);
return;
}
if (this.error !== null) {
return;
}
@@ -0,0 +1,18 @@
'use strict';
const common = require('../common');
const assert = require('node:assert');
const { run, test } = require('node:test');
if (!process.env.NODE_TEST_CONTEXT) {
const stream = run({ files: [__filename] });
stream.on('test:pass', common.mustNotCall());
stream.on('test:fail', common.mustCall((event) => {
assert.strictEqual(event.expectFailure, true);
assert.strictEqual(event.details.error.code, 'ERR_TEST_FAILURE');
assert.strictEqual(event.details.error.failureType, 'expectedFailure');
assert.strictEqual(event.details.error.cause, 'test was expected to fail but passed');
}, 1));
} else {
test('passing test', { expectFailure: true }, () => {});
}
+15
View File
@@ -0,0 +1,15 @@
'use strict';
const common = require('../common');
const assert = require('node:assert');
const { run, test } = require('node:test');
if (!process.env.NODE_TEST_CONTEXT) {
const stream = run({ files: [__filename] });
stream.on('test:fail', common.mustNotCall());
stream.on('test:pass', common.mustCall((event) => {
assert.strictEqual(event.expectFailure, true);
}, 1));
} else {
test('failing test', { expectFailure: true }, () => assert.fail('should not pass'));
}