Как смоделировать client.readQuery из Apollo 2 в Jest - PullRequest
2 голосов
/ 05 марта 2019

Есть компонент, который я использую в кеше, который я создал в apollo, который хранится в client.

В какой-то момент в качестве обратного вызова со входа я выполняю следующий вызов:

const originalName = client.readQuery<NamesCached>({ query: NamesCached })!.names

это возвращает непосредственно массив объектов.

Однако я не знаю, как проверить это в моем компоненте. Мое первое предположение состояло в том, чтобы насмехаться исключительно над client.readQuery, чтобы вернуть мне массив из моего __fixtures__. Это не сработало.

Вот мой лучший способ издеваться над ним:

it('filters the name in the search', () => {
  jest.doMock('@/ApolloClient', () => ({
    readQuery: jest.fn()
  }))
  const client = require('@/ApolloClient')
  client.readQuery.mockImplementation(()=> Promise.resolve(names()))

  const { getByPlaceholderText, queryByText } = renderIndexNames()
  const input = getByPlaceholderText('Search…')

  fireEvent.change(input, { target: { value: 'Second Name' } })

  expect(queryByText('Title for a name')).not.toBeInTheDocument()
})

Для этого теста я использую react-testing-library. Это мой лучший снимок ...

jest.doMock('@/ApolloClient', () => ({
    readQuery: jest.fn()
  }))
  const client = require('@/ApolloClient')
  client.readQuery.mockImplementation(()=> Promise.resolve(names()))

Важно опираться на один ИТ, а не на верх, поскольку есть другие тесты, которые используют клиент и работают правильно. С этим я мог бы посмеяться в тесте, когда invokin client.readQuery(), но затем в самом компоненте возвращается в исходное состояние

Моя цель Найдите способ, с помощью которого client.readQuery можно поиздеваться, и верните данные, которые я ищу. Я думал, что в насмешках, но любое другое решение, которое может работать для одного или группы тестов (без всех), будет более чем приветствоваться.

Я тоже пытался насмехаться сверху, но потом другие терпели неудачу, и я не мог воспроизвести, чтобы вернуться к реальной реализации

...