在现代的 JavaScript 应用程序中,异步操作是一个常见的需求。 ES7 中引入的 async/await 使得异步代码更加易于编写和阅读。 在测试方面,断言异步操作的结果是必不可少的。 Chai 是一个流行的断言库,它提供了一些有用的函数来测试异步代码。 在本文中,我们将学习如何使用 Chai 通过断言 async/await 的正确方式来测试异步代码。
安装 Chai
首先,我们需要安装并设置 Chai。 可以通过 NPM 安装它:
--- ------- ---- ----------
或者通过 Yarn 安装:
---- --- ---- -----
然后在测试文件中导入它:
----- ---- - ----------------
测试回调函数
在介绍 async/await
的测试方法之前,我们需要先了解如何使用 Chai 来测试回调函数。 Chai 提供了一个 done
回调函数来帮助我们测试异步代码。 在回调函数完成后,done()
函数将被调用,这告诉 Mocha 测试已经完成。
例如,假设我们有一个异步函数 fetchData
,它从远程服务器获取数据。 我们可以通过传递 done
回调函数来测试 fetchData
函数是否返回正确的数据:
----- ---- - ---------------- ----- ------ - ------------ -------- ------------------- - ------------- -- - ----------------- -- ----- - --------------------- -- -- - ---------- ------ ------ ------ -- - ---------------- -- - ------------------------------ ------- --- --- ---
在上面的代码中,我们使用 expect
来断言返回的数据是否等于 data
。 然后,在回调函数中调用 done
来通知 Mocha 测试已经完成。 现在我们来看看如何测试 async/await
函数。
测试 async/await 函数
现在,假设我们有一个包含异步函数的代码块,我们需要测试它是否返回了正确的结果。 我们可以使用 async
和 await
关键字来编写我们的测试。
----- ---- - ---------------- ----- ------ - ------------ ----- -------- ----------- - ------ --- ----------------- ------- -- - ------------- -- - ------------ -- ---- --- - --------------------- -- -- - ---------- ------ ---- ----- -- -- - ----- ------ - ----- ------------ ---------------------------- --- ---
在上面的代码中,我们定义了一个 calculate
函数,它返回一个 Promise。 我们将 async 关键字添加到 calculate
函数之前,以指示它是一个异步函数。 在测试中,我们使用 async 关键字来标记测试块,并使用 await 关键字来等待异步函数返回的结果。 我们可以像以前一样使用 expect
来断言返回值。
那么在我们的代码中,当返回错误的值时,我们该怎样测试它呢? 在下面的示例中,我们故意返回了错误的值:
----- ---- - ---------------- ----- ------ - ------------ ----- -------- ----------- - ------ --- ----------------- ------- -- - ------------- -- - ----------- -- ---- --- - --------------------- -- -- - ---------- ------ ---- ----- -- -- - ----- ------ - ----- ------------ ---------------------------- --- ---
现在,我们可以运行这个测试文件。 这将会失败,并且我们将会看到一个错误消息:AssertionError: expected 5 to equal 10
。 这是因为我们期望 calculate
函数返回 10,但实际返回的是 5。
使用 rejects
断言异步函数抛出错误
还有一种情况,那就是异步函数会抛出错误并且我们需要测试这种情况。 我们可以使用 rejects
来断言异步函数是否抛出了错误。 例如,假设我们有一个异步函数 getUser
,它返回一个用户对象。 我们希望测试当用户不存在时,getUser
函数是否会抛出错误。 我们可以这样写:
----- ---- - ---------------- ----- ------ - ------------ ----- -------- ----------- - ------ --- ----------------- ------- -- - -- --- --- -- - --------- --- -- ----- ----- ---- --- - ---- - ---------- ----------- --- --------- - --- - ------------------- -- -- - ---------- ----- -- ----- ---- ---- ---- --- ------- ----- -- -- - ----- -------------------------------------------- ----- --- -------- --- ---
在上面的代码中,我们使用了 expect().to.be.rejectedWith()
函数来断言函数是否抛出错误。 在本例中,我们期望函数抛出 Error
类型的错误,并具有 User not found
的错误信息。
总结
在本文中,我们看到了如何使用 Chai 断言异步函数的正确方式。 当我们测试返回值时,我们需要使用 async/await 来等待异步函数的执行,以确保测试在异步函数返回结果后再运行。 我们还看到了如何测试异步函数是否抛出错误,以及如何在错误消息中包含详细的错误信息。 通过这些技术,我们可以编写更强大和可靠的测试用例,从而提高代码质量和可维护性。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65acd164add4f0e0ff663276