diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2015-10-08 12:25:03 +0200 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2015-10-10 10:49:54 -0700 |
commit | 8383c4fe00e05bb139a3315eefe08b8d1020dfbd (patch) | |
tree | e7fd0294abf34cabd0d9ccdb2fe5bf995de7cdae | |
parent | f0f8afd8795ae6e86129ab5ad1b15b9069454db4 (diff) | |
download | nodejs-8383c4fe00e05bb139a3315eefe08b8d1020dfbd.tar.gz nodejs-8383c4fe00e05bb139a3315eefe08b8d1020dfbd.tar.bz2 nodejs-8383c4fe00e05bb139a3315eefe08b8d1020dfbd.zip |
assert: support arrow functions in .throws()
`x instanceof f` where f is an arrow function throws a (spec-conforming)
"Function has non-object prototype 'undefined' in instanceof check"
exception.
Add a workaround so that it's possible to pass arrow functions as the
second argument to assert.throws(). The try/catch block is a little
jarring but swapping around the clauses in the if statements changes
the semantics too much.
Fixes: https://github.com/nodejs/node/issues/3275
PR-URL: https://github.com/nodejs/node/pull/3276
Reviewed-By: Michaƫl Zasso <mic.besace@gmail.com>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
-rw-r--r-- | lib/assert.js | 14 | ||||
-rw-r--r-- | test/parallel/test-assert.js | 4 |
2 files changed, 13 insertions, 5 deletions
diff --git a/lib/assert.js b/lib/assert.js index ea142ed01..6b99098c5 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 ce84eabc3..ce19462a6 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'); |