【发布时间】:2019-02-25 10:06:16
【问题描述】:
今天我遇到了使用react-testing-library 进行测试的问题。
由于某种原因,react-testing-library 似乎不明白渲染道具已被调用。更准确地说,它似乎不会在第一次渲染后重新渲染孩子。
代码如下(简化)
index.test.js
// Simplified code, this is one test
jest.useFakeTimers();
const renderCallback = jest.fn();
const mockResolvers = {
// Some mock GraphQL resolvers
}
render(
<ReduxMockingProvider initialState={initialState}>
<ApolloMockingProvider mockResolvers={mockResolvers}>
<SomeComponent waitUntilResolved>
{renderCallback}
</SomeComponent>
</ApolloMockingProvider>
</ReduxMockingProvider>,
);
await jest.runAllTicks();
expect(renderCallback).toHaveBeenLastCalledWith(false);
index.js
<SomeComponent waitUntilResolved>
{(result) => {
const data = result.data;
return (
<SomeQueryComponent
query={someQueryHere}
variables={{
// Some variables from data
}}
>
{({ loading, error, data: someData }) => {
if (loading) {
return (props.waitUntilResolved) ? null : props.children({ loading });
}
if (error) return props.children(false);
return props.children(someData);
}}
</SomeQueryComponent>
);
}}
</SomeComponent>
不幸的是,当我这样运行测试时,它没有通过:
expect(jest.fn()).toHaveBeenLastCalledWith(expected)
Expected mock function to have been last called with:
[false]
But it was not called.
如果我在if (loading) {} condition 之前添加props.children(false),它可以正常工作。
如果我在 index.js 中 console.log,我可以看到代码到达最后,即在 return props.children(someData) 之前,但 react-testing-library 不明白有重新渲染并且调用了渲染道具再一次。
有人遇到过这样的问题吗?谢谢你!
【问题讨论】:
标签: reactjs jestjs react-testing-library