Как я / должен разделить свой тест на интеграцию реагирования? - PullRequest
0 голосов
/ 23 июня 2019

У меня есть этот тест, который выполняет 3 вещи:

  1. Ввод onChange обновляется

  2. Кнопка onClick запускает запрос searchMovies со значением ввода

  3. Результаты представлены в документе

код теста:

import { searchMovies as mockSearchMovies, getPopular, getFiltered, getGenreIds } from "./tmdbAPI"

 afterEach(cleanup)

jest.mock('./tmdbAPI', () => {
  return {
    searchMovies: jest.fn(() => Promise.resolve([{ id: 1, title: "test-1", poster_path: 'test-path' }])),
    getPopular: jest.fn(() => Promise.resolve([{}])),
    getFiltered: jest.fn(() => Promise.resolve([{}])),
    getGenreIds: jest.fn(() => Promise.resolve([{}])),
  }
})

test('1. input onChange gets updated, 2. button onClick fires searchMovies request with input value, 3. Results are in the document', async () => {
  const { debug, getByPlaceholderText, getByTestId } = render(
    <Provider>
      <FindMovies />
    </Provider>
  )
  const testText = 'some movie title'
  const input = getByPlaceholderText('Search movies...')
  fireEvent.change(input, { target: { value: testText } })
  expect(input.value).toBe(testText)

  const button = getByTestId('search-button')
  fireEvent.click(button)
  expect(mockSearchMovies).toHaveBeenCalledTimes(1)
  expect(mockSearchMovies).toHaveBeenCalledWith(testText)

  await wait(() => expect(getByTestId("found-movie-item")).toBeInTheDocument())
})
  1. Как мне / следуетЯ разделил этот тест, чтобы каждый test сохранял свое "состояние", чтобы я мог перейти к следующему?

  2. Я использую функцию useEffect в моем провайдере, который запускает getPopular, getFiltered и getGenreIds асинхронный запрос.Если я не издеваюсь над ними, как в примере выше, я получаю ошибку.Есть ли способ обойти эти ненужные насмешки, которые я сейчас не тестирую?

...