首页 > 解决方案 > 使用 Jest 模拟 Fetch API 中的问题

问题描述

我正在尝试使用 Jest 模拟 fetch API,但面临的问题是断言在 fetch 解决之前运行,因此测试总是失败。这是沙箱:https ://codesandbox.io/s/jest-testing-2evvr

我也尝试了 async/await 但仍然是同样的问题:

it("should update result on successful fetch", async () => {
    const updateSearchResult = jest.fn();
    await handleSearch("api");
    expect(updateSearchResult).toHaveBeenCalledTimes(1);
  });

如何解决这个问题,以便代码在 finally 块获取之后运行。谢谢

标签: jestjs

解决方案


handleSearch不返回作为反模式的承诺,因此await handleSearch("api")不会影响任何事情。如果没有提供,它也会失败callback。本机承诺允许为 提供一个非函数then,在这种情况下它被忽略了。由于回调应该接收与回调相同的参数then,它应该是:

function handleSearch(searchQuery, callback) {
  return fetch(searchQuery)
  .then(callback)
  ...
}

推荐阅读