Jest 是一个流行的 JavaScript 测试框架,旨在提供开箱即用的测试体验。在编写前端测试时,需要处理异步代码,而 Jest 提供了许多捕获异步事件的方式。本文将介绍在 Jest 中捕获异步事件的不同形式以及如何使用它们。
Callback
异步测试的最常见形式是通过回调函数进行。例如,处理 AJAX 请求或定时器回调等。在 Jest 中,可以使用 done
参数来指示测试已完成。当测试调用 done()
时,Jest 才会认为测试结束。
-- -------------------- ---- ------- ------------------ ------ -- - -------- ------------------- - ------------- -- - ----------------- -- ----- - ---------------- -- - -------------------------- ------- --- ---
在此测试中,我们创建了一个 fetchData
函数,它将在 100 毫秒后返回数据。我们使用回调函数来接收数据,在回调函数中进行断言,并在完成后调用 done
。
Promise
另一个常见的异步形式是 Promise。在 Jest 中,我们可以使用 return
来测试 Promise。Jest 等待 Promise 完成,然后进行断言。如果 Promise 被拒绝,则测试将自动失败。
-- -------------------- ---- ------- -------- ------- -------- -- -- - -------- ----------- - ------ --- ----------------- ------- -- - ------------- -- - ---------------- -- ----- --- - ------ ----------------------- -- - -------------------------- --- ---
在此测试中,我们创建了一个返回 Promise 的函数并等待它完成。在完成后,我们进行断言,我们不再需要使用 done
,因为 Jest 等待 Promise 完成。
Async/Await
自 ES7 以来,我们可以使用 async/await 来处理异步方式。在 Jest 中,我们可以将测试函数声明为异步函数,并使用 await
来等待异步代码完成。如果 Promise 被拒绝,则使用 try-catch 块捕获错误。
-- -------------------- ---- ------- -------- ----------- -------- ----- -- -- - -------- ----------- - ------ --- ----------------- ------- -- - ------------- -- - ---------------- -- ----- --- - ----- ---- - ----- ------------ -------------------------- ---
在此测试中,我们声明函数为异步函数,并使用 await 等待 Promise 完成。在完成后,我们进行断言。
其他形式
除了以上形式,Jest 提供了许多其他形式来处理异步代码。例如 jest.useFakeTimers()
和 jest.runOnlyPendingTimers()
可以用于处理定时器。使用 Jest 的 expect().resolves
和 expect().rejects
可以测试 Promise 的状态。在测试中,您最好使用适当的形式来处理您的异步代码。
结论
在 Jest 中捕获异步事件的形式有很多,本文介绍了常用的几种。如果您有一些异步测试需要处理,请使用该方式来保证您的测试代码可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676fd854e9a7045d0d774ce4