-
-
Notifications
You must be signed in to change notification settings - Fork 31.5k
doc: add guides on writing tests involving promises #20988
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
Mention `common.crashOnUnhandledRejection()` and wrapping the handlers in `common.mustCall()` or `common.mustNotCall()`
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With nits)
doc/guides/writing-tests.md
Outdated
|
||
When writing tests involving promises, either make sure that the | ||
`onFulfilled` or the `onRejected` handler is wrapped in | ||
`common.mustCall()` or `common.mustNotCall` accordingly, or |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
common.mustNotCall
-> common.mustNotCall()
?
doc/guides/writing-tests.md
Outdated
const fs = require('fs').promises; | ||
|
||
// Use `common.crashOnUnhandledRejection()` to make sure unhandled rejections | ||
// will fail the test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
test
-> test.
?
doc/guides/writing-tests.md
Outdated
// will fail the test | ||
common.crashOnUnhandledRejection(); | ||
|
||
// Or, wrap the `onRejected` handler in `common.mustNotCall()` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto, period)
doc/guides/writing-tests.md
Outdated
// Or, wrap the `onRejected` handler in `common.mustNotCall()` | ||
fs.writeFile('test-file', 'test').catch(common.mustNotCall()); | ||
|
||
// Or, wrap the `onFulfilled` handler in `common.mustCall()` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto, period)
doc/guides/writing-tests.md
Outdated
(content) => assert.strictEqual(content.toString(), 'test') | ||
)); | ||
``` | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Extra empty line.
doc/guides/writing-tests.md
Outdated
fs.readFile('test-file').then( | ||
common.mustCall( | ||
(content) => assert.strictEqual(content.toString(), 'test') | ||
)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's an example, but I think it makes sense to add catch()
to handle the case where the assertion fails.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lpinca that is demonstrated in the first example...also the onFullfilled
and the onRejected
handler are mutually exclusive so common.mustCall
should be able to catch that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure I understand, this
const common = require('../common');
const assert = require('assert');
const fs = require('fs');
const fsPromises = fs.promises;
fs.writeFileSync('test-file', 'foo');
fsPromises.readFile('test-file').then(
common.mustCall((content) => {
assert.strictEqual(content.toString(), 'test');
})
);
should make the test fails, but it doesn't if common.crashOnUnhandledRejection();
is not added.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lpinca I see what you mean now, the catch
needs to handle possible failures if the onFulfilled
handler is not empty. Thanks for catching that!
Landed in df16d20 |
Mention `common.crashOnUnhandledRejection()` and wrapping the handlers in `common.mustCall()` or `common.mustNotCall()`. PR-URL: #20988 Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Mention `common.crashOnUnhandledRejection()` and wrapping the handlers in `common.mustCall()` or `common.mustNotCall()`. PR-URL: #20988 Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Mention
common.crashOnUnhandledRejection()
and wrapping thehandlers in
common.mustCall()
orcommon.mustNotCall()
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passes