在 Node.js 中,Promise 是一种非常常见的异步编程方式。然而,测试 Promise 的结果却不是那么简单。这时候,我们就需要一个能够方便地测试 Promise 的工具,这就是 Chai-as-Promised。
Chai-as-Promised 是什么?
Chai-as-Promised 是 Chai.js 的一个插件,它可以让我们方便地测试 Promise 的结果。它提供了一些特殊的断言,比如 eventually
和 fulfilledWith
,可以让我们更加方便地测试 Promise。
安装和使用
首先,我们需要安装 Chai 和 Chai-as-Promised:
npm install chai chai-as-promised --save-dev
然后,在测试文件中引入 Chai 和 Chai-as-Promised:
const chai = require('chai'); const chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised);
现在,我们就可以使用 Chai-as-Promised 来测试 Promise 了。
eventually 断言
eventually
断言用来测试一个 Promise 最终会返回什么值。比如,我们有一个返回 Promise 的函数 getUserName
,我们想测试它最终会返回一个字符串类型的用户名:
-- -------------------- ---- ------- ----- ----------- - -- -- - ------ --- ----------------- ------- -- - ------------- -- - ------------- ------ -- ------ --- -- ----------------------- -- -- - ---------- ---------- ------ - -------- -- -- - ------ --------------------------------------------------- --- ---
在上面的测试中,我们使用了 eventually
断言来测试 getUserName
最终会返回一个字符串类型的值。
fulfilledWith 断言
fulfilledWith
断言用来测试一个 Promise 最终会返回一个特定的值。比如,我们有一个返回 Promise 的函数 add
,我们想测试它最终会返回 3:
-- -------------------- ---- ------- ----- --- - --- -- -- - ------ --- ----------------- ------- -- - ------------- -- - --------- - --- -- ------ --- -- --------------- -- -- - ---------- -- --------- ---- --- -- -- - ------ ------------- ----------------------------------- --- ---
在上面的测试中,我们使用了 fulfilledWith
断言来测试 add
最终会返回 3。
rejectedWith 断言
除了测试 Promise 成功返回值的情况,我们也需要测试 Promise 失败的情况。这时候,我们可以使用 rejectedWith
断言。比如,我们有一个返回 Promise 的函数 div
,我们想测试它在除以 0 的时候会抛出一个错误:
-- -------------------- ---- ------- ----- --- - --- -- -- - ------ --- ----------------- ------- -- - -- -- --- -- - ---------- ------------- ------ -- -------- - ---- - --------- - --- - --- -- --------------- -- -- - ---------- -- -------- ---- -- ------- -- -- - ------ ------------- ------------------------------------- ------- ------ -- ------- --- ---
在上面的测试中,我们使用了 rejectedWith
断言来测试 div
在除以 0 的时候会抛出一个错误。
总结
Chai-as-Promised 是一个非常方便的工具,可以让我们更加方便地测试 Promise。在使用 Chai-as-Promised 的时候,我们需要注意,Promise 是异步的,所以我们需要使用 return
来让测试等待 Promise 返回结果。同时,我们也需要注意,Promise 可能会抛出错误,所以我们需要测试 Promise 抛出错误的情况。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6552e18cd2f5e1655dc93cc1