异步操作的测试
前端开发中,涉及很多的异步操作,如网络请求、定时器等等。这些异步操作会带来一些测试上的问题。
- 无法确定异步操作的执行时间;
- 无法确定异步操作执行的结果;
- 异步操作可能存在错误(如网络超时)。
如何在 Jest 中测试异步操作呢?我们可以使用 Jest 提供的工具来帮助我们进行异步操作的测试。
Jest 的异步测试
在 Jest 中,我们可以使用以下两种方式测试异步代码:
- 回调函数;
- Promises。
回调函数
对于回调函数的测试,我们需要在测试函数中指定 done
参数,调用 done()
方法来通知 Jest 异步操作已经完成,如下:
-- -------------------- ---- ------- -------------- ------ -- - -------- ----------------- - ------------- -- - ------------------- -- ----- - ---------------- -- - ------------------------------ ------ -- --展开代码
在这个例子中,我们使用 setTimeout
模拟异步操作完成,并在 asyncFn
函数中使用回调函数将结果返回,测试函数中的 done
参数将用来告知 Jest 异步操作已经完成。
Promises
如果异步函数返回 Promise,则我们需要在测试函数中返回 Promise 对象,并使用 .then()
方法来检查 Promise 的期望值,如下:
-- -------------------- ---- ------- -------------- -- -- - -------- --------- - ------ --- ----------------- -- - ------------- -- - ------------------ -- ----- -- - ------ --------------------- -- - ------------------------------ -- --展开代码
在这个例子中,我们使用 setTimeout
模拟异步操作完成,并使用 Promise 对象返回异步函数的值,测试函数中使用 .then()
方法检查我们的期望值。
最佳实践
- 使用 Promises 进行异步操作测试;
- 避免在测试函数中嵌套回调函数;
- 不要在测试函数中使用
setTimeout
来等待异步操作的结束; - 使用 Jest 提供的工具函数如:
expect.assertions()
,expect.assertionErrors()
,来优化异步操作的测试。
总结
Jest提供了方便易用的工具来测试异步操作,使用Promises能更容易的进行异步操作的调用和检查,而避免回调函数的嵌套和使用Jest的标准工具,将会写出更加干净,易于阅读的测试代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647aad05968c7c53b065a0a0