[英]`react-apollo` `MockedProvider` requires timeout?
I'm using jest
with react-apollo's MockedProvider
and I'm having trouble because the MockedProvider
seems to be behaving asynchronously.我在 react-apollo 的
MockedProvider
使用jest
并且我遇到了麻烦,因为MockedProvider
似乎是异步运行的。
Given the following simple component:给定以下简单组件:
const Component = () => <Query query={query}>(({loading, data }) => if(loading) return 'loading' else if (data) return 'data' else return 'nothing'</Query>
This test:本次测试:
it('', done => {
const renderer = TestRenderer.create(
<MockedProvider mocks={myMock} >
<Component/>
</MockedProvider>
)
expect(renderer.toJSON()).toMatchSnapshot()
shows a snapshot of: loading
显示快照:
loading
but if I add a simple timeout of 1 ms:但如果我添加一个简单的 1 毫秒超时:
it('', done => {
const renderer = TestRenderer.create(
<MockedProvider mocks={myMock} >
<Component/>
</MockedProvider>
)
setTimeout(() => {
expect(renderer.toJSON()).toMatchSnapshot()
done()
}, 1);
I get a snapshot of: data
我得到了一个快照:
data
Is there a more elegant way to get around this?有没有更优雅的方法来解决这个问题?
I'm curious if other's have ideas.我很好奇其他人是否有想法。
Right now having to do something like this:现在必须做这样的事情:
export const AsyncTestRenderer = async elements => {
/** Render, then allow the event loop to be flushed before returning */
const renderer = TestRenderer.create(elements)
return new Promise(resolve => {
setTimeout(() => resolve(renderer), 1)
})
}
and using it in a test:并在测试中使用它:
const renderer = await AsyncTestRenderer(
<MockedProvider mocks={mocks} >
<MyComponent/>
</MockedProvider>
)
expect(renderer.toJSON()).toMatchSnapshot() // renders data from mock Query
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.