assert: inspect getters

While asserting two objects the descriptor is not taken into account.
Therefore getters will be triggered as such. This makes sure they
are also highlighted in the error message instead of potentially
looking identical while the return value of the getter is actually
different.

PR-URL: https://github.com/nodejs/node/pull/25004
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
pull/25107/head
Ruben Bridgewater 2018-12-13 04:05:41 +01:00
parent 0858e5d9d8
commit 3b2698e41f
No known key found for this signature in database
GPG Key ID: F07496B3EB3C1762
2 changed files with 26 additions and 2 deletions

View File

@ -56,7 +56,9 @@ function inspectValue(val) {
breakLength: Infinity,
// Assert does not detect proxies currently.
showProxy: false,
sorted: true
sorted: true,
// Inspect getters as we also check them when comparing entries.
getters: true
}
);
}

View File

@ -24,7 +24,8 @@ function re(literals, ...values) {
customInspect: false,
maxArrayLength: Infinity,
breakLength: Infinity,
sorted: true
sorted: true,
getters: true
});
// Need to escape special characters.
result += str;
@ -1049,3 +1050,24 @@ assert.throws(
});
assertDeepAndStrictEqual(a, b);
}
// Check getters.
{
const a = {
get a() { return 5; }
};
const b = {
get a() { return 6; }
};
assert.throws(
() => assert.deepStrictEqual(a, b),
{
code: 'ERR_ASSERTION',
name: 'AssertionError [ERR_ASSERTION]',
message: /a: \[Getter: 5]\n- a: \[Getter: 6]\n /
}
);
// The descriptor is not compared.
assertDeepAndStrictEqual(a, { a: 5 });
}