diff --git a/lib/assert.js b/lib/assert.js index ea142ed01f8f6e..6b99098c5fda35 100644 --- a/lib/assert.js +++ b/lib/assert.js @@ -268,13 +268,17 @@ function expectedException(actual, expected) { if (Object.prototype.toString.call(expected) == '[object RegExp]') { return expected.test(actual); - } else if (actual instanceof expected) { - return true; - } else if (expected.call({}, actual) === true) { - return true; } - return false; + try { + if (actual instanceof expected) { + return true; + } + } catch (e) { + // Ignore. The instanceof check doesn't work for arrow functions. + } + + return expected.call({}, actual) === true; } function _throws(shouldThrow, block, expected, message) { diff --git a/test/parallel/test-assert.js b/test/parallel/test-assert.js index ce84eabc34e1d4..ce19462a62387c 100644 --- a/test/parallel/test-assert.js +++ b/test/parallel/test-assert.js @@ -465,4 +465,8 @@ testBlockTypeError(assert.doesNotThrow, null); testBlockTypeError(assert.throws, undefined); testBlockTypeError(assert.doesNotThrow, undefined); +// https://github.com/nodejs/node/issues/3275 +assert.throws(() => { throw 'error'; }, err => err === 'error'); +assert.throws(() => { throw Error(); }, err => err instanceof Error); + console.log('All OK');