From a25f56730e815794ff645a2a050da22343fa7d89 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Sat, 7 Apr 2018 14:22:29 +0200 Subject: assert: detect faulty throws usage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One of the biggest downsides to the `assert.throws` API is that it does not check for the error message in case that is used as second argument. It will instead be used in case no error is thrown. This improves the situation by checking the actual error message against the provided one and throws an error in case they are identical. It is very unlikely that the user wants to use that error message as information instead of checking against that message. PR-URL: https://github.com/nodejs/node/pull/19867 Reviewed-By: Michaƫl Zasso Reviewed-By: Matteo Collina Reviewed-By: James M Snell --- test/parallel/test-assert.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'test/parallel/test-assert.js') diff --git a/test/parallel/test-assert.js b/test/parallel/test-assert.js index 4115167d4b..c061551604 100644 --- a/test/parallel/test-assert.js +++ b/test/parallel/test-assert.js @@ -836,3 +836,32 @@ common.expectsError( } ); } + +assert.throws( + () => a.throws( + // eslint-disable-next-line no-throw-literal + () => { throw 'foo'; }, + 'foo' + ), + { + code: 'ERR_AMBIGUOUS_ARGUMENT', + message: 'The "error/message" argument is ambiguous. ' + + 'The error "foo" is identical to the message.' + } +); + +assert.throws( + () => a.throws( + () => { throw new TypeError('foo'); }, + 'foo' + ), + { + code: 'ERR_AMBIGUOUS_ARGUMENT', + message: 'The "error/message" argument is ambiguous. ' + + 'The error message "foo" is identical to the message.' + } +); + +// Should not throw. +// eslint-disable-next-line no-restricted-syntax, no-throw-literal +assert.throws(() => { throw null; }, 'foo'); -- cgit v1.2.3