测试使用 apollo 客户端查询和订阅的 React 组件

问题描述 投票:0回答:2

有人有关于测试使用 apollo 客户端查询和订阅的 React 组件的提示吗?看起来当您将

<MockedProvider />
组件与
mocks
link
道具一起使用时,它只会忽略模拟。 感谢您的帮助!!

javascript reactjs testing jestjs apollo
2个回答
0
投票

除非你有充分的理由,否则你不应该弄乱

link
MockedProvdier
支柱。
MockedProvider
中使用的默认链接是 MockLink,它管理为给定查询生成模拟的逻辑。像这样对 apollo docs 中给出的示例进行建模,它应该可以工作:

import TestRenderer from 'react-test-renderer';
import { MockedProvider } from '@apollo/client/testing';
import { GET_DOG_QUERY, Dog } from './dog';

const mocks = [
  {
    request: {
      query: GET_DOG_QUERY,
      variables: {
        name: 'Buck',
      },
    },
    result: {
      data: {
        dog: { id: '1', name: 'Buck', breed: 'bulldog' },
      },
    },
  },
];

it('renders without error', () => {
  const component = TestRenderer.create(
    <MockedProvider mocks={mocks} addTypename={false}>
      <Dog name="Buck" />
    </MockedProvider>,
  );

  const tree = component.toJSON();
  expect(tree.children).toContain('Loading...');
});

0
投票

这可以通过连接链接来实现,如下所示:

const mocks: MockedResponse[] = [
  {
    request: {
      query: SomeDocument,
      variables: { someVariable: "variable" },
    },
    result: {
      data: {
        someDate: {someValue: "value"},
      },
    },
  },
]

const queryLink = new MockLink(mocks)
const subscriptionLink = new MockSubscriptionLink()

const link = ApolloLink.from([
  split(({ query }) => {
    const definition = getMainDefinition(query)
    return definition.name?.value === 'subscriptionOperation'
  }, subscriptionLink),
  split(({ query }) => {
    const definition = getMainDefinition(query)
    return definition.name?.value === 'queryOperation'
  }, queryLink),
])

<MockedProvider link={link} addTypename={false}>
[...]
</MockedProvider>
© www.soinside.com 2019 - 2024. All rights reserved.