summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/assert.js27
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/assert.js b/lib/assert.js
index a1b22d3e46..035a7e1746 100644
--- a/lib/assert.js
+++ b/lib/assert.js
@@ -20,7 +20,7 @@
'use strict';
-const { Object } = primordials;
+const { Object, ObjectPrototype } = primordials;
const { Buffer } = require('buffer');
const { codes: {
@@ -36,6 +36,7 @@ const { inspect } = require('internal/util/inspect');
const { isPromise, isRegExp } = require('internal/util/types');
const { EOL } = require('internal/constants');
const { NativeModule } = require('internal/bootstrap/loaders');
+const { isError } = require('internal/util');
const errorCache = new Map();
@@ -561,6 +562,8 @@ function compareExceptionKey(actual, expected, key, message, keys, fn) {
}
function expectedException(actual, expected, message, fn) {
+ let generatedMessage = false;
+
if (typeof expected !== 'function') {
// Handle regular expressions.
if (isRegExp(expected)) {
@@ -618,8 +621,26 @@ function expectedException(actual, expected, message, fn) {
if (expected.prototype !== undefined && actual instanceof expected) {
return;
}
- if (Error.isPrototypeOf(expected)) {
- throw actual;
+ if (ObjectPrototype.isPrototypeOf(Error, expected)) {
+ if (!message) {
+ generatedMessage = true;
+ message = 'The error is expected to be an instance of ' +
+ `"${expected.name}". Received `;
+ if (isError(actual)) {
+ message += `"${actual.name}"`;
+ } else {
+ message += `"${inspect(actual, { depth: -1 })}"`;
+ }
+ }
+ const err = new AssertionError({
+ actual,
+ expected,
+ message,
+ operator: fn.name,
+ stackStartFn: fn
+ });
+ err.generatedMessage = generatedMessage;
+ throw err;
}
// Check validation functions return value.