From df16d20f7569f6538eb6558ea63c614e3b139abc Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Mon, 28 May 2018 00:59:28 +0800 Subject: [PATCH] doc: add guides on writing tests involving promises Mention `common.crashOnUnhandledRejection()` and wrapping the handlers in `common.mustCall()` or `common.mustNotCall()`. PR-URL: https://github.com/nodejs/node/pull/20988 Reviewed-By: Vse Mozhet Byt Reviewed-By: Daniel Bevenius Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater Reviewed-By: Trivikram Kamat Reviewed-By: James M Snell --- doc/guides/writing-tests.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/doc/guides/writing-tests.md b/doc/guides/writing-tests.md index 340d527dd20080..ac2844ebf43d5b 100644 --- a/doc/guides/writing-tests.md +++ b/doc/guides/writing-tests.md @@ -223,6 +223,37 @@ countdown.dec(); countdown.dec(); // The countdown callback will be invoked now. ``` +#### Testing promises + +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 +call `common.crashOnUnhandledRejection()` in the top level of the +test to make sure that unhandled rejections would result in a test +failure. For example: + +```javascript +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs').promises; + +// Use `common.crashOnUnhandledRejection()` to make sure unhandled rejections +// will fail the test. +common.crashOnUnhandledRejection(); + +// Or, wrap the `onRejected` handler in `common.mustNotCall()`. +fs.writeFile('test-file', 'test').catch(common.mustNotCall()); + +// Or, wrap the `onFulfilled` handler in `common.mustCall()`. +// If there are assertions in the `onFulfilled` handler, wrap +// the next `onRejected` handler in `common.mustNotCall()` +// to handle potential failures. +fs.readFile('test-file').then( + common.mustCall( + (content) => assert.strictEqual(content.toString(), 'test2') + )) + .catch(common.mustNotCall()); +``` ### Flags