使用 Jest 测试异步操作时如何进行测试?

阅读时长 3 分钟读完

异步操作的测试

前端开发中,涉及很多的异步操作,如网络请求、定时器等等。这些异步操作会带来一些测试上的问题。

  • 无法确定异步操作的执行时间;
  • 无法确定异步操作执行的结果;
  • 异步操作可能存在错误(如网络超时)。

如何在 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

纠错
反馈

纠错反馈