问题描述:
使用Apollo MockedProvider时,测试代码可能会立即返回null,而不是返回正确的结果。
确认MockedProvider是否正确配置: 在测试代码中,确保正确定义了MockedProvider,包括提供的mocks和缓存。
import { MockedProvider } from '@apollo/client/testing';
const mocks = [
{
request: {
query: MY_QUERY,
},
result: {
data: {
myData: {
id: 1,
name: "Test",
},
}
},
},
];
render(
,
);
异步处理: 如果组件需要从GraphQL查询中获取数据,则需要确保使用了async和await关键字来处理异步请求。这可以确保测试代码等待查询完成,而不会立即返回null。
test('test my component', async () => {
render(
,
);
await wait(() => {
expect(screen.getByText(/Test/)).toBeInTheDocument();
});
});
使用ApolloCacheMock: 如果仍然遇到问题,可以考虑使用ApolloCacheMock来管理数据缓存。这可以确保MockedProvider能够正确地从缓存中获取数据,而不是从GraphQL服务器获取数据。
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { cache } from '@apollo/client/utilities';
import { ApolloCacheMock } from 'apollo-cache-inmemory';
const client = new ApolloClient({
// 设置为使用apollo-cache-inmemory的Apollo客户端
cache: new InMemoryCache(),
// 检查Apollo缓存与GraphQL服务器中的数据是否足够匹配
defaultOptions: {
watchQuery: {
fetchPolicy: 'cache-first',
},
},
});
const cacheMock = new ApolloCacheMock({
client,
addTypename: false,
});
render(
,
);
上一篇:ApolloMockedProvider:“Failedtomatchxmocksforthisquery”wherexisoffby1.NeverseesthequeryIaskfor
下一篇:ApolloMockedProvideristhrowingerror'Elementtypeisinvalid'