summaryrefslogtreecommitdiff
path: root/doc/api/assert.md
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2017-12-09 21:47:49 -0200
committerRuben Bridgewater <ruben@bridgewater.de>2017-12-19 13:43:11 -0300
commitda5c7d68cdceaa70411ffab6bee16e200a703aa9 (patch)
treef0b9658290f2ea05c5bb777748bf35af5f79367d /doc/api/assert.md
parentdc2e266647cec8ba3e6f61d6da90001fa8c5649f (diff)
downloadandroid-node-v8-da5c7d68cdceaa70411ffab6bee16e200a703aa9.tar.gz
android-node-v8-da5c7d68cdceaa70411ffab6bee16e200a703aa9.tar.bz2
android-node-v8-da5c7d68cdceaa70411ffab6bee16e200a703aa9.zip
assert: improve assert.throws
Throw a TypeError in case a error message is provided in the second argument and a third argument is present as well. This is clearly a mistake and should not be done. PR-URL: https://github.com/nodejs/node/pull/17585 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Evan Lucas <evanlucas@me.com>
Diffstat (limited to 'doc/api/assert.md')
-rw-r--r--doc/api/assert.md37
1 files changed, 31 insertions, 6 deletions
diff --git a/doc/api/assert.md b/doc/api/assert.md
index cf2212c90e..7ad56accc2 100644
--- a/doc/api/assert.md
+++ b/doc/api/assert.md
@@ -767,17 +767,42 @@ assert.throws(
Note that `error` can not be a string. If a string is provided as the second
argument, then `error` is assumed to be omitted and the string will be used for
-`message` instead. This can lead to easy-to-miss mistakes:
+`message` instead. This can lead to easy-to-miss mistakes. Please read the
+example below carefully if using a string as the second argument gets
+considered:
<!-- eslint-disable no-restricted-syntax -->
```js
-// THIS IS A MISTAKE! DO NOT DO THIS!
-assert.throws(myFunction, 'missing foo', 'did not throw with expected message');
-
-// Do this instead.
-assert.throws(myFunction, /missing foo/, 'did not throw with expected message');
+function throwingFirst() {
+ throw new Error('First');
+}
+function throwingSecond() {
+ throw new Error('Second');
+}
+function notThrowing() {}
+
+// The second argument is a string and the input function threw an Error.
+// In that case both cases do not throw as neither is going to try to
+// match for the error message thrown by the input function!
+assert.throws(throwingFirst, 'Second');
+assert.throws(throwingSecond, 'Second');
+
+// The string is only used (as message) in case the function does not throw:
+assert.throws(notThrowing, 'Second');
+// AssertionError [ERR_ASSERTION]: Missing expected exception: Second
+
+// If it was intended to match for the error message do this instead:
+assert.throws(throwingSecond, /Second$/);
+// Does not throw because the error messages match.
+assert.throws(throwingFirst, /Second$/);
+// Throws a error:
+// Error: First
+// at throwingFirst (repl:2:9)
```
+Due to the confusing notation, it is recommended not to use a string as the
+second argument. This might lead to difficult-to-spot errors.
+
[`Error.captureStackTrace`]: errors.html#errors_error_capturestacktrace_targetobject_constructoropt
[`Map`]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map
[`Object.is()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is