Understanding Mocha's Run Cycle and Handling Multiple done() Calls
In this section we will give a brief outline on the order Mocha's components are executed. It should be noted that all hooks, describe and it callbacks will be run in the order that you define them. That is to say as they are written in your test file.
run 'mocha spec.js'
```
|
spawn child process
|
|--------------> inside child process
process and apply options
|
run spec file/s
|
|--------------> per spec file
suite callbacks (e.g., 'describe')
|
'before' root-level pre-hook
|
'before' pre-hook
|
|--------------> per test
'beforeEach' root-level pre-hook
|
'beforeEach' pre-hook
|
test callbacks (e.g., 'it')
|
'afterEach' post-hook
|
'afterEach' root-level post-hook
|<-------------- per test end
|
'after' post-hook
|
'after' root-level post-hooks
|<-------------- per spec file end
|<-------------- inside child process end
Detects multiple calls to done()
This is the first feature we will be discussing, whenever you use callback-based async tests, Mocha throws an error if done() is called multiple times. This is useful for catching double callbacks.
it('double done', function(done) {
// calling `done()` twice will be an error
setImmediate(done);
setImmediate(done);
});
You will get the error message below when you run the test above:
./node_modules/.bin/mocha mocha.test.js
? double done
1) double done
1 passing (6ms)
1 failing
1) double done:
Error: done() called multiple times
at Object.<anonymous> (mocha.test.js:1:63)
at require (internal/module.js:11:18)
at Array.forEach (<anonymous>)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
Multiple call to done() error message
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://w3resource.com/mocha/run-cycle-overview.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics