diff options
author | ConorDavenport <cnrdavenport@gmail.com> | 2020-02-27 14:41:05 +0300 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2020-04-23 20:11:47 +0300 |
commit | 50d28d4b3a616b04537feff014aa70437f064e30 (patch) | |
tree | 071a416ff706a11ed1abd2388fd401d301764a37 /doc/api | |
parent | 01e158c600d451bcbb3da4d276a9e61dcc84ebe4 (diff) |
assert: port common.mustCall() to assert
Fixes: https://github.com/nodejs/node/issues/31392
PR-URL: https://github.com/nodejs/node/pull/31982
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Zeyu Yang <himself65@outlook.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Diffstat (limited to 'doc/api')
-rw-r--r-- | doc/api/assert.md | 135 | ||||
-rw-r--r-- | doc/api/errors.md | 7 |
2 files changed, 142 insertions, 0 deletions
diff --git a/doc/api/assert.md b/doc/api/assert.md index d5d0a606c2b..9baccfeaa7f 100644 --- a/doc/api/assert.md +++ b/doc/api/assert.md @@ -147,6 +147,137 @@ try { } ``` +## Class: `assert.CallTracker` + +### `new assert.CallTracker()` +<!-- YAML +added: REPLACEME +--> + +Creates a new [`CallTracker`][] object which can be used to track if functions +were called a specific number of times. The `tracker.verify()` must be called +for the verification to take place. The usual pattern would be to call it in a +[`process.on('exit')`][] handler. + +```js +const assert = require('assert'); + +const tracker = new assert.CallTracker(); + +function func() {} + +// callsfunc() must be called exactly 1 time before tracker.verify(). +const callsfunc = tracker.calls(func, 1); + +callsfunc(); + +// Calls tracker.verify() and verifies if all tracker.calls() functions have +// been called exact times. +process.on('exit', () => { + tracker.verify(); +}); +``` + +### `tracker.calls([fn][, exact])` +<!-- YAML +added: REPLACEME +--> + +* `fn` {Function} **Default** A no-op function. +* `exact` {number} **Default** `1`. +* Returns: {Function} that wraps `fn`. + +The wrapper function is expected to be called exactly `exact` times. If the +function has not been called exactly `exact` times when +[`tracker.verify()`][] is called, then [`tracker.verify()`][] will throw an +error. + +```js +const assert = require('assert'); + +// Creates call tracker. +const tracker = new assert.CallTracker(); + +function func() {} + +// Returns a function that wraps func() that must be called exact times +// before tracker.verify(). +const callsfunc = tracker.calls(func); +``` + +### `tracker.report()` +<!-- YAML +added: REPLACEME +--> + +* Returns: {Array} of objects containing information about the wrapper functions +returned by [`tracker.calls()`][]. +* Object {Object} + * `message` {string} + * `actual` {number} The actual number of times the function was called. + * `expected` {number} The number of times the function was expected to be + called. + * `operator` {string} The name of the function that is wrapped. + * `stack` {Object} A stack trace of the function. + +The arrays contains information about the expected and actual number of calls of +the functions that have not been called the expected number of times. + +```js +const assert = require('assert'); + +// Creates call tracker. +const tracker = new assert.CallTracker(); + +function func() {} + +function foo() {} + +// Returns a function that wraps func() that must be called exact times +// before tracker.verify(). +const callsfunc = tracker.calls(func, 2); + +// Returns an array containing information on callsfunc() +tracker.report(); +// [ +// { +// message: 'Expected the func function to be executed 2 time(s) but was +// executed 0 time(s).', +// actual: 0, +// expected: 2, +// operator: 'func', +// stack: stack trace +// } +// ] +``` + +### `tracker.verify()` +<!-- YAML +added: REPLACEME +--> + +Iterates through the list of functions passed to +[`tracker.calls()`][] and will throw an error for functions that +have not been called the expected number of times. + +```js +const assert = require('assert'); + +// Creates call tracker. +const tracker = new assert.CallTracker(); + +function func() {} + +// Returns a function that wraps func() that must be called exact times +// before tracker.verify(). +const callsfunc = tracker.calls(func, 2); + +callsfunc(); + +// Will throw an error since callsfunc() was only called once. +tracker.verify(); +``` + ## `assert(value[, message])` <!-- YAML added: v0.5.9 @@ -1423,6 +1554,7 @@ argument. [`TypeError`]: errors.html#errors_class_typeerror [`WeakMap`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap [`WeakSet`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet +[`CallTracker`]: #assert_class_assert_calltracker [`assert.deepEqual()`]: #assert_assert_deepequal_actual_expected_message [`assert.deepStrictEqual()`]: #assert_assert_deepstrictequal_actual_expected_message [`assert.doesNotThrow()`]: #assert_assert_doesnotthrow_fn_error_message @@ -1434,6 +1566,9 @@ argument. [`assert.ok()`]: #assert_assert_ok_value_message [`assert.strictEqual()`]: #assert_assert_strictequal_actual_expected_message [`assert.throws()`]: #assert_assert_throws_fn_error_message +[`process.on('exit')`]: process.html#process_event_exit +[`tracker.calls()`]: #assert_class_assert_CallTracker#tracker_calls +[`tracker.verify()`]: #assert_class_assert_CallTracker#tracker_verify [strict assertion mode]: #assert_strict_assertion_mode [Abstract Equality Comparison]: https://tc39.github.io/ecma262/#sec-abstract-equality-comparison [Object wrappers]: https://developer.mozilla.org/en-US/docs/Glossary/Primitive#Primitive_wrapper_objects_in_JavaScript diff --git a/doc/api/errors.md b/doc/api/errors.md index 5308490b88f..ccd4b3b52a0 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -1967,6 +1967,12 @@ A `Transform` stream finished with data still in the write buffer. The initialization of a TTY failed due to a system error. +<a id="ERR_UNAVAILABLE_DURING_EXIT"></a> +### `ERR_UNAVAILABLE_DURING_EXIT` + +Function was called within a [`process.on('exit')`][] handler that shouldn't be +called within [`process.on('exit')`][] handler. + <a id="ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET"></a> ### `ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET` @@ -2543,6 +2549,7 @@ such as `process.stdout.on('data')`. [`net`]: net.html [`new URL(input)`]: url.html#url_constructor_new_url_input_base [`new URLSearchParams(iterable)`]: url.html#url_constructor_new_urlsearchparams_iterable +[`process.on('exit')`]: process.html#Event:-`'exit'` [`process.send()`]: process.html#process_process_send_message_sendhandle_options_callback [`process.setUncaughtExceptionCaptureCallback()`]: process.html#process_process_setuncaughtexceptioncapturecallback_fn [`readable._read()`]: stream.html#stream_readable_read_size_1 |