【发布时间】:2021-11-12 19:24:43
【问题描述】:
我正在使用 Apollo Client (3.3.16) MockedProvider 和 Jest + react 测试库来测试使用带有 onCompleted 属性的 useLazyQuery 的组件。但是,MockedProvider 不能调用 onCompleted 函数(在我的例子中是handleData())。在console.log之后我发现onCompleted函数从来没有被触发过。任何想法如何使用 useLazyQuery 测试组件(在我的情况下)?提前点赞! 我的 react 组件代码是这样的:
const handleData = data => { // this function never been called for testing
setData(data.dataWithFilters.data);
};
const [loadData, { loading }] = useLazyQuery(
GET_DATA,
{
variables: {
id: productId,
first: 999999,
page: 1,
isBase: true
},
onCompleted: handleData, // never been triggered for testing
fetchPolicy: "network-only"
}
);
useEffect(() => { // works fine
loadData({
variables: {
id: productId,
first: 999999,
page: 1,
isBase: true
},
fetchPolicy: "network-only"
});
}, [loadData, productId]);
我的测试代码是:
const renderComponent = (mocksData) => {
render(
<MockedProvider
mocks={mocksData}
defaultOptions={{
query: { fetchPolicy: "no-cache" },
watchQuery: { fetchPolicy: 'no-cache' },
}}
addTypename={false}
>
<ServicesContextProvider freightRateServices={{}}>
<ContractInformationPageProvider>
<MemoryRouter initialEntries={["contracts/311"]}>
<Route path="products/:productId">
<ContractInformationPage />
</Route>
</MemoryRouter>
</ContractInformationPageProvider>
</ServicesContextProvider>
</MockedProvider>,
{
wrapper: BrowserRouter
}
);
};
【问题讨论】:
标签: reactjs apollo-client testing-library