gpt4 book ai didi

javascript - 模拟由 react 钩子(Hook)返回的函数

转载 作者:行者123 更新时间:2023-12-02 21:33:06 25 4
gpt4 key购买 nike

我正在使用 useQuery 钩子(Hook)构建一个分页,作为 React 中 Apollo 客户端的一部分,它公开了一个名为 fetchMore 的函数,如下所示:https://www.apollographql.com/docs/react/data/pagination/

一切正常,但我正在尝试编写一个测试用例,即 fetchMore 函数由于网络错误而失败。我的组件中的代码如下所示。

const App = () => {
// Some other component logic
const {loading, data, error, fetchMore} = useQuery(QUERY)

const handleChange = () => {
fetchMore({
variables: {
offset: data.feed.length
},
updateQuery: (prev, { fetchMoreResult }) => {
if (!fetchMoreResult) return prev;
return Object.assign({}, prev, {
feed: [...prev.feed, ...fetchMoreResult.feed]
});
}
}).catch((e) => {
// handle the error
})
}
}

基本上我想测试 fetchMore 函数抛出错误的情况。我不想模拟整个 useQuery,只是模拟 fetchMore 函数。在我的测试中仅模拟 fetchMore 函数的最佳方法是什么?

最佳答案

一种方法就是模拟钩子(Hook)

在您的规范文件中:

import { useQuery } from '@apollo/react-hooks'

jest.mock('@apollo/react-hooks',() => ({
__esModule:true
useQuery:jest.fn()
});

console.log(useQuery) // mock function - do whatever you want!

/*
e.g. useQuery.mockImplementation(() => ({
data:...
loading:...
fetchMore:jest.fn(() => throw new Error('bad'))
});
*/

您还可以模拟“幕后”发生的事情来模拟网络错误,做任何您需要的事情来测试您的捕获。

编辑:

  1. this page 上搜索 __esModule: true你就会明白的。
  2. 模拟整个函数并将所有内容作为模拟数据返回可能更容易。但你可以unmock it使用真实的,以免与其他测试冲突。

关于javascript - 模拟由 react 钩子(Hook)返回的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60568562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com