📌  相关文章
📜  jest 在 jest 指定的 5000 毫秒超时内未调用异步回调 (1)

📅  最后修改于: 2023-12-03 14:43:06.163000             🧑  作者: Mango

Jest测试框架 - 异步回调超时问题

当使用 Jest 框架测试异步代码的时候,经常会遇到异步回调函数未被调用或者调用时间太长导致测试失败的问题。这个问题通常是由于异步回调未被正确处理导致的,比如回调函数未被返回或者被忘记调用等。

超时设置

在 Jest 中可以设置异步回调的超时时间,可以使用 jest.setTimeout(timeout) 函数来指定超时时间,单位是毫秒。默认超时时间是 5000 毫秒。

jest.setTimeout(10000); // 设置超时时间为 10 秒
超时错误类型

如果在指定的时间内,异步回调函数未被调用,则 Jest 会抛出一个 TimeoutError 异常,测试也会被失败。这时我们需要检查代码是否正确处理了异步回调函数或者是否存在异步回调漏洞。

test("异步回调超时测试", () => {
  return new Promise((resolve) => {
    setTimeout(resolve, 15000); // 15 秒超时
  });
});

在上面的例子中,超时时间为 15 秒,如果 Promise 回调函数在 15 秒内未被执行,则抛出 TimeoutError 异常。

解决方法

要解决 Jest 中异步回调超时问题,可以采用以下方法:

  1. 确保代码正确处理了异步回调函数
  2. 设置合理的超时时间
  3. 使用 Jest 提供的异步测试方式,如使用 async/await 关键字或者 done() 回调函数

以下给出使用 async/await 关键字的示例代码:

test("异步回调测试 - async/await", async () => {
  await expect(Promise.resolve("成功")).resolves.toBe("成功");
});

在这个例子中,使用 Promise 对象返回一个成功的结果,然后使用 expect() 函数进行期望值测试,并使用 resolves 关键字表示期望对象是一个 Promise 对象并已经被成功解决。最终验证期望结果是否为 "成功"。