From c3772a8dd5fd288a797da7d5b763f9bd68715404 Mon Sep 17 00:00:00 2001 From: Andy Edwards Date: Wed, 20 Sep 2017 08:39:32 -0500 Subject: [PATCH] Add an example of how to use async/await to the README --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 94c1e0f..502ee0f 100644 --- a/README.md +++ b/README.md @@ -179,6 +179,17 @@ it("should change the state", function (done) { Notice how `.notify(done)` is hanging directly off of `.should`, instead of appearing after a promise assertion. This indicates to Chai as Promised that it should pass fulfillment or rejection directly through to the testing framework. Thus, the above code will fail with a Chai as Promised error (`"expected promise to be fulfilled…"`) if `promise` is rejected, but will fail with a simple Chai error (`expected "before" to equal "after"`) if `otherState` does not change. +### Working with `async`/`await` and Promise-Friendly Test Runners + +Since any assertion that must wait on a promise returns a promise itself, if you're able to use `async`/`await` and your test runner supports returning a promise from test methods, you can await assertions in tests. In many cases you can avoid using Chai as Promised at all by performing a synchronous assertion after an `await`, but awaiting `rejectedWith` is often more convenient than using `try`/`catch` blocks without Chai as Promised: + +```javascript +it('should work well with async/await', async () => { + (await Promise.resolve(42)).should.equal(42) + await Promise.reject(new Error()).should.be.rejectedWith(Error); +}); +``` + ### Multiple Promise Assertions To perform assertions on multiple promises, use `Promise.all` to combine multiple Chai as Promised assertions: