Skip to content

Commit 97c52ca

Browse files
committed
assert: add more information to AssertionErrors
This adds information about the actual thrown error to the AssertionError's message property. It also improves the logged error instances error name by using the constructors name, if available. PR-URL: #28263 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 5700cd1 commit 97c52ca

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

lib/assert.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -620,8 +620,13 @@ function expectedException(actual, expected, message, fn) {
620620
generatedMessage = true;
621621
message = 'The error is expected to be an instance of ' +
622622
`"${expected.name}". Received `;
623+
// TODO: Special handle identical names.
623624
if (isError(actual)) {
624-
message += `"${actual.name}"`;
625+
const name = actual.constructor && actual.constructor.name;
626+
message += `"${name || actual.name}"`;
627+
if (actual.message) {
628+
message += `\n\nError message:\n\n${actual.message}`;
629+
}
625630
} else {
626631
message += `"${inspect(actual, { depth: -1 })}"`;
627632
}
@@ -636,6 +641,10 @@ function expectedException(actual, expected, message, fn) {
636641
const name = expected.name ? `"${expected.name}" ` : '';
637642
message = `The ${name}validation function is expected to return` +
638643
` "true". Received ${inspect(res)}`;
644+
645+
if (isError(actual)) {
646+
message += `\n\nCaught error:\n\n${actual}`;
647+
}
639648
}
640649
throwError = true;
641650
}

test/parallel/test-assert-async.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ const invalidThenableFunc = () => {
7373
() => assert.rejects(Promise.reject(err), validate),
7474
{
7575
message: 'The "validate" validation function is expected to ' +
76-
"return \"true\". Received 'baz'",
76+
"return \"true\". Received 'baz'\n\nCaught error:\n\n" +
77+
'Error: foobar',
7778
code: 'ERR_ASSERTION',
7879
actual: err,
7980
expected: validate,

test/parallel/test-assert.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ assert.throws(
133133
name: 'AssertionError',
134134
operator: 'throws',
135135
message: 'The error is expected to be an instance of "AssertionError". ' +
136-
'Received "TypeError"'
136+
'Received "TypeError"\n\nError message:\n\n[object Object]'
137137
}
138138
);
139139

@@ -255,7 +255,7 @@ a.throws(() => thrower(TypeError), (err) => {
255255
assert.strictEqual(
256256
err.message,
257257
'The error is expected to be an instance of "ES6Error". ' +
258-
'Received "Error"'
258+
'Received "AnotherErrorType"\n\nError message:\n\nfoo'
259259
);
260260
assert.strictEqual(err.actual, actual);
261261
return true;
@@ -1334,7 +1334,8 @@ assert.throws(
13341334
() => assert.throws(() => { throw err; }, validate),
13351335
{
13361336
message: 'The validation function is expected to ' +
1337-
`return "true". Received ${inspect(validate())}`,
1337+
`return "true". Received ${inspect(validate())}\n\nCaught ` +
1338+
`error:\n\n${err}`,
13381339
code: 'ERR_ASSERTION',
13391340
actual: err,
13401341
expected: validate,

0 commit comments

Comments
 (0)