Chai-As-Promised 库使用方法及示例

阅读时长 6 分钟读完

Chai-As-Promised 是一个用于测试异步操作的 Chai 插件。它提供了链式的断言语法,以方便我们对 Promise 对象进行测试。

该库的主要优点在于,它让我们可以使用同样的语言来测试同步和异步操作。它还可以更好地处理异步操作中的错误和超时。在这篇文章中,我们将介绍 Chai-As-Promised 库的基础知识和使用方法,并提供测试示例。

安装和引入 Chai-As-Promised

首先,在项目中安装 Chai-As-Promised 库:

然后,在测试文件中引入 Chai 和 Chai-As-Promised:

注意,因为 Chai-As-Promised 是 Chai 的插件,因此我们必须先引入 Chai。

Chai-As-Promised 断言

在 Chai-As-Promised 库中,我们可以使用 .eventually 这个关键字来包装 Promise 对象,然后在链式调用中使用断言。

例如,假设我们有一个异步函数 getData,该函数返回一个 Promise 对象。现在我们想要测试该函数返回的数据是否与预期相同:

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

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

在上面的例子中,我们使用 .eventually 包装了 expect,并使用 .deep.equal 对在解析 Promise 后的值进行比较。

下面是一些 Chai-As-Promised 的其他使用方法:

.to.eventually.be.fulfilled

.to.eventually.be.fulfilled 断言用于检查 Promise 对象是否已经被解析。如果 Promise 对象成功被解析,该断言将返回成功。如果 Promise 对象被拒绝,该断言将失败。

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

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

.to.eventually.be.rejected

.to.eventually.be.rejected 断言用于检查 Promise 对象是否已被拒绝。如果 Promise 对象被拒绝,该断言将返回成功。如果 Promise 对象成功被解析,该断言将失败。

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

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

在上面的例子中,我们期望该 Promise 对象被拒绝,并且被拒绝的原因是一个 Error 实例,错误消息为 "bar"。

.to.eventually.be.rejectedWith()

.to.eventually.be.rejectedWith() 断言用于检查 Promise 对象是否被拒绝,并验证拒绝的原因是否符合预期。

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

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

.to.eventually.have.property()

.to.eventually.have.property() 断言用于检查 Promise 对象是否在解析后包含特定的属性。该方法的语法与 Chai 的 .to.have.property() 完全相同。

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

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

在上面的例子中,我们期望解析后的对象包含一个名为 foo 的属性。

示例

下面是使用 Chai-As-Promised 进行测试的示例:

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

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

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

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

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

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

在这个示例中,我们测试了一个名为 getData 的异步函数,该函数返回一个 JSON 对象。我们测试了该函数的返回值是否与预期值相符,以及该函数是否成功解析和包含预期属性。

结论

Chai-As-Promised 提供了一种有效的方式来测试异步操作。通过使用 .eventually 关键字,我们可以将断言链式化,并且可以与同步代码相同,提高了测试代码的可读性。在编写前端测试时,我们可以简单地使用 Chai-As-Promised 进行异步操作的测试。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674c023c14b275ea6fdfcaf6

纠错
反馈