assert.fail() has two possible function signatures, both of which are
not intuitive. It virtually guarantees that people who try to use
assert.fail() without carefully reading the docs will end up using it
incorrectly.
This change maintains backwards compatibility with the two valid uses
(arguments 1 2 and 4 supplied but argument 3 falsy, and argument 3
supplied but arguments 1 2 and 4 all falsy) but also adds the far more
intuitive first-argument-only and first-two-arguments-only
possibilities.
assert.fail('boom');
// AssertionError: boom
assert.fail('a', 'b');
// AssertionError: 'a' != 'b'
Backport-PR-URL: https://github.com/nodejs/node/pull/15479
PR-URL: https://github.com/nodejs/node/pull/12293
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
40 lines
960 B
JavaScript
40 lines
960 B
JavaScript
'use strict';
|
|
|
|
require('../common');
|
|
const assert = require('assert');
|
|
|
|
// no args
|
|
assert.throws(
|
|
() => { assert.fail(); },
|
|
/^AssertionError: undefined undefined undefined$/
|
|
);
|
|
|
|
// one arg = message
|
|
assert.throws(
|
|
() => { assert.fail('custom message'); },
|
|
/^AssertionError: custom message$/
|
|
);
|
|
|
|
// two args only, operator defaults to '!='
|
|
assert.throws(
|
|
() => { assert.fail('first', 'second'); },
|
|
/^AssertionError: 'first' != 'second'$/
|
|
);
|
|
|
|
// three args
|
|
assert.throws(
|
|
() => { assert.fail('ignored', 'ignored', 'another custom message'); },
|
|
/^AssertionError: another custom message$/
|
|
);
|
|
|
|
// no third arg (but a fourth arg)
|
|
assert.throws(
|
|
() => { assert.fail('first', 'second', undefined, 'operator'); },
|
|
/^AssertionError: 'first' operator 'second'$/
|
|
);
|
|
|
|
// The stackFrameFunction should exclude the foo frame
|
|
assert.throws(
|
|
function foo() { assert.fail('first', 'second', 'message', '!==', foo); },
|
|
(err) => !/foo/m.test(err.stack)
|
|
);
|