【发布时间】:2020-09-19 02:50:13
【问题描述】:
我正在测试一个使用 graphql useLazyQuery 的组件。 MockProvider 由 Apollo 推荐的库 @apollo/react-testing 提供。我想测试某个消息是否根据查询返回的数据长度呈现。我的 html 元素结构如下:
<div className="message" data-id={props.data ? props.data.specials.length > 0 ? 'valid' : 'invalid' : ''}>
...children
</div>
我阅读了 Apollo 的有关测试的文档,并写了一个这样的测试:
mock = {
request: {
query: GET_PRODUCTS,
variables: { zip: "91001" }
},
result: {
data: {
specials: [
{
"_id": "5ecf28c459d3781a2e99738e",
},
{
"_id": "5ecf28c459d3781a2e99738f",
}
]
}
}
}
wrapper = mount(
<MockedProvider mocks={[mock]} addTypename={false}>
<Store.Provider value={[{ loading: false, zip: null }]}>
<GetZipCode />
</Store.Provider>
</MockedProvider>
)
await wait(0)
expect(wrapper.find(message).prop('data-id')).toEqual('valid')
但我发现测试不会根据我放置的模拟进行更新。我对此进行了测试,我将此值作为模拟传递:
mock = {
request: {
query: GET_PRODUCTS,
variables: { zip: "32005" }
},
result: {
data: { specials: [] }
}
}
...after tests
expect(wrapper.find(message).prop('data-id')).toEqual('invalid')
对于这两个测试,预期值为“”,这是我的 html 元素中的 data-id 属性的初始值。如果我将初始值设置为“无效”而不是“”,那么我的测试中的预期值将输出“无效”。
似乎无论我通过我的模拟提供程序它都不会等待它通过。我也在使用 Apollo 推荐的等待包。
【问题讨论】:
标签: graphql enzyme react-apollo