Chai-As-Promised 是一个用于测试异步操作的 Chai 插件。它提供了链式的断言语法,以方便我们对 Promise 对象进行测试。
该库的主要优点在于,它让我们可以使用同样的语言来测试同步和异步操作。它还可以更好地处理异步操作中的错误和超时。在这篇文章中,我们将介绍 Chai-As-Promised 库的基础知识和使用方法,并提供测试示例。
安装和引入 Chai-As-Promised
首先,在项目中安装 Chai-As-Promised 库:
npm install 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 是 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