Skip to content

Commit 89cb67f

Browse files
committed
assert: show the diff when deep comparing data with a custom message
Fixes: #48465
1 parent 5949e16 commit 89cb67f

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

lib/internal/assert/assertion_error.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function inspectValue(val) {
7272
);
7373
}
7474

75-
function createErrDiff(actual, expected, operator) {
75+
function createErrDiff(actual, expected, operator, message = '') {
7676
let other = '';
7777
let res = '';
7878
let end = '';
@@ -184,8 +184,8 @@ function createErrDiff(actual, expected, operator) {
184184

185185
let printedLines = 0;
186186
let identical = 0;
187-
const msg = kReadableOperator[operator] +
188-
`\n${colors.green}+ actual${colors.white} ${colors.red}- expected${colors.white}`;
187+
const errorMsg = message || kReadableOperator[operator];
188+
const msg = `${errorMsg}\n${colors.green}+ actual${colors.white} ${colors.red}- expected${colors.white}`;
189189
const skippedMsg = ` ${colors.blue}...${colors.white} Lines skipped`;
190190

191191
let lines = actualLines;
@@ -337,7 +337,11 @@ class AssertionError extends Error {
337337
if (isErrorStackTraceLimitWritable()) Error.stackTraceLimit = 0;
338338

339339
if (message != null) {
340-
super(String(message));
340+
if (operator === 'deepStrictEqual' || operator === 'strictEqual') {
341+
super(createErrDiff(actual, expected, operator, message));
342+
} else {
343+
super(String(message));
344+
}
341345
} else {
342346
// Reset colors on each call to make sure we handle dynamically set environment
343347
// variables correct.

test/parallel/test-assert.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,9 +389,9 @@ test('Test assertion messages', () => {
389389
);
390390

391391
assert.throws(
392-
() => assert.strictEqual(1, 2, 'oh no'),
392+
() => assert.strictEqual(1, 2, 'Expected values to be strictly equal:\n\n1 !== 2\n'),
393393
{
394-
message: 'oh no',
394+
message: 'Expected values to be strictly equal:\n\n1 !== 2\n',
395395
generatedMessage: false
396396
}
397397
);
@@ -1204,7 +1204,7 @@ test('Additional assert', () => {
12041204
),
12051205
{
12061206
actual,
1207-
message,
1207+
message: "message\n+ actual - expected\n\n+ 'foobar'\n- {\n- message: 'foobar'\n- }",
12081208
operator: 'throws',
12091209
generatedMessage: false
12101210
}
@@ -1251,6 +1251,17 @@ test('Additional assert', () => {
12511251
}
12521252
);
12531253

1254+
assert.throws(
1255+
() => {
1256+
assert.deepStrictEqual({ a: true }, { a: false }, 'custom message');
1257+
},
1258+
{
1259+
code: 'ERR_ASSERTION',
1260+
name: 'AssertionError',
1261+
message: 'custom message\n+ actual - expected\n\n {\n+ a: true\n- a: false\n }'
1262+
}
1263+
);
1264+
12541265
{
12551266
let threw = false;
12561267
try {

0 commit comments

Comments
 (0)