summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-06-15 13:27:21 +0200
committerRuben Bridgewater <ruben@bridgewater.de>2019-10-01 22:56:01 +0200
commit97c52ca5dc0b9c4df015dc36ef394ebe06ec00c6 (patch)
tree1358922d0f8dce279dffc43ebcbcd3095eee4e71
parent5700cd17dd167f6835131b42809476e5f30762ba (diff)
downloadandroid-node-v8-97c52ca5dc0b9c4df015dc36ef394ebe06ec00c6.tar.gz
android-node-v8-97c52ca5dc0b9c4df015dc36ef394ebe06ec00c6.tar.bz2
android-node-v8-97c52ca5dc0b9c4df015dc36ef394ebe06ec00c6.zip
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: https://github.com/nodejs/node/pull/28263 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--lib/assert.js11
-rw-r--r--test/parallel/test-assert-async.js3
-rw-r--r--test/parallel/test-assert.js7
3 files changed, 16 insertions, 5 deletions
diff --git a/lib/assert.js b/lib/assert.js
index 50ab6b39b1..0b256e604e 100644
--- a/lib/assert.js
+++ b/lib/assert.js
@@ -620,8 +620,13 @@ function expectedException(actual, expected, message, fn) {
generatedMessage = true;
message = 'The error is expected to be an instance of ' +
`"${expected.name}". Received `;
+ // TODO: Special handle identical names.
if (isError(actual)) {
- message += `"${actual.name}"`;
+ const name = actual.constructor && actual.constructor.name;
+ message += `"${name || actual.name}"`;
+ if (actual.message) {
+ message += `\n\nError message:\n\n${actual.message}`;
+ }
} else {
message += `"${inspect(actual, { depth: -1 })}"`;
}
@@ -636,6 +641,10 @@ function expectedException(actual, expected, message, fn) {
const name = expected.name ? `"${expected.name}" ` : '';
message = `The ${name}validation function is expected to return` +
` "true". Received ${inspect(res)}`;
+
+ if (isError(actual)) {
+ message += `\n\nCaught error:\n\n${actual}`;
+ }
}
throwError = true;
}
diff --git a/test/parallel/test-assert-async.js b/test/parallel/test-assert-async.js
index 45447d4563..cbb4431f19 100644
--- a/test/parallel/test-assert-async.js
+++ b/test/parallel/test-assert-async.js
@@ -73,7 +73,8 @@ const invalidThenableFunc = () => {
() => assert.rejects(Promise.reject(err), validate),
{
message: 'The "validate" validation function is expected to ' +
- "return \"true\". Received 'baz'",
+ "return \"true\". Received 'baz'\n\nCaught error:\n\n" +
+ 'Error: foobar',
code: 'ERR_ASSERTION',
actual: err,
expected: validate,
diff --git a/test/parallel/test-assert.js b/test/parallel/test-assert.js
index 9c59227a78..07cf374696 100644
--- a/test/parallel/test-assert.js
+++ b/test/parallel/test-assert.js
@@ -133,7 +133,7 @@ assert.throws(
name: 'AssertionError',
operator: 'throws',
message: 'The error is expected to be an instance of "AssertionError". ' +
- 'Received "TypeError"'
+ 'Received "TypeError"\n\nError message:\n\n[object Object]'
}
);
@@ -255,7 +255,7 @@ a.throws(() => thrower(TypeError), (err) => {
assert.strictEqual(
err.message,
'The error is expected to be an instance of "ES6Error". ' +
- 'Received "Error"'
+ 'Received "AnotherErrorType"\n\nError message:\n\nfoo'
);
assert.strictEqual(err.actual, actual);
return true;
@@ -1334,7 +1334,8 @@ assert.throws(
() => assert.throws(() => { throw err; }, validate),
{
message: 'The validation function is expected to ' +
- `return "true". Received ${inspect(validate())}`,
+ `return "true". Received ${inspect(validate())}\n\nCaught ` +
+ `error:\n\n${err}`,
code: 'ERR_ASSERTION',
actual: err,
expected: validate,