首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Apollo的MockedProvider没有为包装在withApollo中的组件提供客户端

Apollo是一个流行的GraphQL客户端库,MockedProvider是Apollo提供的一个用于测试的辅助组件。它允许开发者在单元测试中模拟GraphQL请求的响应数据,以便更好地测试应用程序的组件。然而,使用MockedProvider包装在withApollo中的组件时,它可能无法正确地提供Apollo客户端实例。

withApollo是一个高阶组件,它将Apollo客户端实例注入到包装的组件中。这意味着被包装的组件可以通过props访问Apollo客户端实例,并使用其提供的功能,例如发送GraphQL查询或变异。

然而,MockedProvider是基于Apollo的内部存储系统来模拟响应数据的。它无法直接访问通过withApollo注入的Apollo客户端实例,因此无法提供正确的模拟数据。

解决这个问题的方法是手动创建一个Apollo客户端实例,并将其传递给MockedProvider组件作为props。这样,MockedProvider就可以正常工作,并为包装在withApollo中的组件提供模拟数据。

以下是示例代码:

代码语言:txt
复制
import { ApolloClient, ApolloProvider, InMemoryCache } from '@apollo/client';
import { MockedProvider } from '@apollo/client/testing';
import { withApollo } from 'next-apollo';

// 创建Apollo客户端实例
const apolloClient = new ApolloClient({
  uri: 'https://example.com/graphql',
  cache: new InMemoryCache(),
});

// 包装组件
const MyComponent = () => {
  return <div>My Component</div>;
};

// 使用withApollo将Apollo客户端实例注入到组件中
const MyComponentWithApollo = withApollo(apolloClient)(MyComponent);

// 使用MockedProvider包装组件,并将手动创建的Apollo客户端实例传递给它
const MockedComponent = () => {
  return (
    <MockedProvider mocks={[]} addTypename={false} cache={apolloClient.cache}>
      <MyComponentWithApollo />
    </MockedProvider>
  );
};

// 在测试中使用MockedComponent进行测试

在上述示例代码中,我们手动创建了一个Apollo客户端实例apolloClient,并将其传递给withApollo函数来注入到MyComponent中。然后,我们将手动创建的Apollo客户端实例传递给MockedProvider组件,以便它能够正常工作并提供模拟数据。

需要注意的是,MockedProvidermocks属性可以用于提供模拟的响应数据,addTypename属性用于控制是否在响应数据中添加__typename字段,cache属性用于传递Apollo客户端实例的缓存。

总结:为了让Apollo的MockedProvider正常为包装在withApollo中的组件提供模拟数据,我们需要手动创建Apollo客户端实例,并将其传递给MockedProvider作为props。这样,我们就可以在单元测试中使用MockedProvider来测试组件的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券