@@ -265,11 +265,12 @@ added:
265265 - v25.5.0
266266-->
267267
268- This flips the pass/fail reporting for a specific test or suite: A flagged test/test-case must throw
269- in order to "pass"; a test/test-case that does not throw, fails.
268+ This flips the pass/fail reporting for a specific test or suite: a flagged test
269+ case must throw in order to pass, and a flagged test case that does not throw
270+ fails.
270271
271- In the following, ` doTheThing() ` returns _ currently _ ` false ` ( ` false ` does not equal ` true ` , causing
272- ` strictEqual ` to throw, so the test-case passes) .
272+ In each of the following, ` doTheThing() ` fails to return ` true ` , but since the
273+ tests are flagged ` expectFailure ` , they pass .
273274
274275``` js
275276it .expectFailure (' should do the thing' , () => {
@@ -279,6 +280,50 @@ it.expectFailure('should do the thing', () => {
279280it (' should do the thing' , { expectFailure: true }, () => {
280281 assert .strictEqual (doTheThing (), true );
281282});
283+
284+ it (' should do the thing' , { expectFailure: ' feature not implemented' }, () => {
285+ assert .strictEqual (doTheThing (), true );
286+ });
287+ ```
288+
289+ If the value of ` expectFailure ` is a
290+ [ <RegExp >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp ) |
291+ [ <Function >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function ) |
292+ [ <Object >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object ) |
293+ [ <Error >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error ) ,
294+ the tests will pass only if they throw a matching value.
295+ See [ ` assert.throws ` ] [ ] for how each value type is handled.
296+
297+ Each of the following tests fails _ despite_ being flagged ` expectFailure `
298+ because the failure does not match the specific ** expected** failure.
299+
300+ ``` js
301+ it (' fails because regex does not match' , {
302+ expectFailure: / expected message/ ,
303+ }, () => {
304+ throw new Error (' different message' );
305+ });
306+
307+ it (' fails because object matcher does not match' , {
308+ expectFailure: { code: ' ERR_EXPECTED' },
309+ }, () => {
310+ const err = new Error (' boom' );
311+ err .code = ' ERR_ACTUAL' ;
312+ throw err;
313+ });
314+ ```
315+
316+ To supply both a reason and specific error for ` expectFailure ` , use ` { label, match } ` .
317+
318+ ``` js
319+ it (' should fail with specific error and reason' , {
320+ expectFailure: {
321+ label: ' reason for failure' ,
322+ match: / error message/ ,
323+ },
324+ }, () => {
325+ assert .strictEqual (doTheThing (), true );
326+ });
282327```
283328
284329` skip ` and/or ` todo ` are mutually exclusive to ` expectFailure ` , and ` skip ` or ` todo `
@@ -1684,6 +1729,18 @@ changes:
16841729 thread. If ` false ` , only one test runs at a time.
16851730 If unspecified, subtests inherit this value from their parent.
16861731 ** Default:** ` false ` .
1732+ * ` expectFailure ` {boolean|string|RegExp|Function|Object|Error} If truthy, the
1733+ test is expected to fail. If a non-empty string is provided, that string is displayed
1734+ in the test results as the reason why the test is expected to fail. If a
1735+ [ <RegExp >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp ) ,
1736+ [ <Function >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function ) ,
1737+ [ <Object >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object ) , or
1738+ [ <Error >] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error )
1739+ is provided directly (without wrapping in ` { match: … } ` ), the test passes
1740+ only if the thrown error matches, following the behavior of
1741+ [ ` assert.throws ` ] [ ] . To provide both a reason and validation, pass an object
1742+ with ` label ` (string) and ` match ` (RegExp, Function, Object, or Error).
1743+ ** Default:** ` false ` .
16871744 * ` only ` {boolean} If truthy, and the test context is configured to run
16881745 ` only ` tests, then this test will be run. Otherwise, the test is skipped.
16891746 ** Default:** ` false ` .
@@ -4148,6 +4205,7 @@ Can be used to abort test subtasks when the test has been aborted.
41484205[ `NODE_V8_COVERAGE` ] : cli.md#node_v8_coveragedir
41494206[ `SuiteContext` ] : #class-suitecontext
41504207[ `TestContext` ] : #class-testcontext
4208+ [ `assert.throws` ] : assert.md#assertthrowsfn-error-message
41514209[ `context.diagnostic` ] : #contextdiagnosticmessage
41524210[ `context.skip` ] : #contextskipmessage
41534211[ `context.todo` ] : #contexttodomessage
0 commit comments