Chai 中如何断言一个 Promise 成功或拒绝

在前端开发过程中,使用 Promise 是非常常见的,而在测试过程中对 Promise 的测试成为了必不可少的步骤。在使用 Chai 进行断言时,对 Promise 的断言同样是需要掌握的关键点。在本篇文章中,我们将会探讨如何使用 Chai 对 Promise 进行成功或拒绝断言。

如何进行 Promise 的断言

在 Chai 中,一个 Promise 可以使用 eventually 来返回一个 settled 的 Promise 对象,并通过 fulfilledrejected 方法来断言 Promise 的状态。

fulfilled 方法用来断言 Promise 成功,并且通常通过 .then 方法或内置的解析函数来返回 Promise 的结果。如果 Promise 的状态是 rejected,则该测试将会失败。

rejected 方法用来断言 Promise 拒绝,并且通常通过 .catch 方法或内置的拒绝函数来抛出 Promise 拒绝的原因。如果 Promise 的状态是 fulfilled,则该测试将会失败。

例如,在测试回调函数时,假设我们有一个返回 Promise 对象的异步函数,我们可以使用如下的代码进行函数测试:

---------- ------ ---- ----- -- --- - -------- -- -- -
  ------ --------------------------- - ----------------------------------------
---

---------- ------- -- -- ---- ----- -- --- -- -- -
  ------ --------------------------------------------------------------------
---

在上述示例中,我们首先测试当传入 not a number 时,是否会抛出 TypeError 异常。我们期望进行 rejected 的断言,并且期望抛出 TypeError 异常。在第二个测试中,我们测试当传入 5 时,myAsyncFunction 是否会返回 10。我们期望进行 fulfilled 的断言,并且期望返回的结果等于 10。

更复杂的断言方法

当需要进行更复杂的断言时,我们可以使用 eventually 链式调用来链接多个断言。例如,假设我们需要对列表中的元素进行测试,并且我们需要测试列表是否按照升序排列:

---------- ---- --- ---- -- --------- ------- -- -- -
  ----- ---- - --- -- -- -- ---

  ------ -------------------------------------------------
    -------------------------------
    -------------------------------- -- -- -- ----
---

在上述示例中,我们首先使用 eventually 来进行 settle 成功的断言。然后我们进一步使用 an.instanceOf 来断言返回的结果是一个数组。最后使用 ordered.members 来断言该数组是否按照升序排列。通过 eventually 链式调用,我们能够方便地对 Promise 进行更复杂的测试。

总结

通过本篇文章,我们学习了如何使用 Chai 对 Promise 进行成功或拒绝的断言,并且展示了一些高级的测试用例。尽管 Promise 在测试过程中常常会引发一些错误,但是通过充分掌握 Promise 断言的技巧,我们可以更好地测试 Promise 相关的代码,为我们的项目提供更高的质量保证。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65291f387d4982a6ebbad32e


猜你喜欢

相关推荐

    暂无文章