问题描述:
使用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'