今天我面临一个使用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.
如果我在它工作正常props.children(false)
之前添加。if (loading) {} condition
如果我console.log
在 index.js 中,我可以看到代码到达最后,即之前return props.children(someData)
但react-testing-library
不明白有重新渲染并且再次调用渲染道具。
有没有人遇到过这样的问题?谢谢 !