assert: show proper differences

Right now it is possible to get an AssertionError from input that has
the customInspect function set to always return the same value.

That way the error message is actually misleading because the output
is going to look the same. This fixes it by deactivating the custom
inspect function.

PR-URL: https://github.com/nodejs/node/pull/18611
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
pull/18591/merge
Ruben Bridgewater 2018-02-07 02:23:40 +01:00
parent 656a5d042d
commit 0cdc87778e
No known key found for this signature in database
GPG Key ID: F07496B3EB3C1762
2 changed files with 11 additions and 5 deletions

View File

@ -164,9 +164,9 @@ function createErrDiff(actual, expected, operator) {
var skipped = false;
const util = lazyUtil();
const actualLines = util
.inspect(actual, { compact: false }).split('\n');
.inspect(actual, { compact: false, customInspect: false }).split('\n');
const expectedLines = util
.inspect(expected, { compact: false }).split('\n');
.inspect(expected, { compact: false, customInspect: false }).split('\n');
const msg = `Input A expected to ${operator} input B:\n` +
`${green}+ expected${white} ${red}- actual${white}`;
const skippedMsg = ' ... Lines skipped';
@ -310,8 +310,10 @@ class AssertionError extends Error {
} else if (errorDiff === 1) {
// In case the objects are equal but the operator requires unequal, show
// the first object and say A equals B
const res = util
.inspect(actual, { compact: false }).split('\n');
const res = util.inspect(
actual,
{ compact: false, customInspect: false }
).split('\n');
if (res.length > 20) {
res[19] = '...';

View File

@ -574,7 +574,11 @@ common.expectsError(
message: `${start}\n` +
`${actExp}\n` +
'\n' +
' {}'
`${minus} {}\n` +
`${plus} {\n` +
`${plus} loop: 'forever',\n` +
`${plus} [Symbol(util.inspect.custom)]: [Function]\n` +
`${plus} }`
});
// notDeepEqual tests