jestjs - 使用 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 块获取之后运行。谢谢
解决方案
handleSearch
不返回作为反模式的承诺,因此await handleSearch("api")
不会影响任何事情。如果没有提供,它也会失败callback
。本机承诺允许为 提供一个非函数then
,在这种情况下它被忽略了。由于回调应该接收与回调相同的参数then
,它应该是:
function handleSearch(searchQuery, callback) {
return fetch(searchQuery)
.then(callback)
...
}
推荐阅读
- python - 如何给所有具有某种不和谐状态的用户一个角色
- ruby-on-rails - 我正在尝试在 factory_bot rails 中创建列表,以限制字符串数组中的序列
- android - 如何以编程方式获取 Android 中的当前热值?
- api - PostMan 正在工作,但 http 在颤动中出现 404 错误
- class - 防止客户直接实例化我的具体类
- ios - 如何在 iOS 13+ 中获取对状态栏的引用?
- reactjs - Effective element movement on keystroke in React
- mysql - 使用 2 个计数功能连接三个表
- msbuild - 使用 cc.net 和 msbuild 设置程序集文件版本和程序集版本
- python - 运行 Python 和 tkinter 的最低系统要求