Почему улов срабатывает, если моя выборка успешна? - PullRequest
0 голосов
/ 13 марта 2020

Я тестирую с компонентом, где компонент монтировал, он получает некоторые данные из API,

Я проверяю ответ, чтобы он был успешным, но все же блок catch запускается, я думаю, что это не должно .

и я получаю эту ошибку:

TypeError: Network request failed
          at XMLHttpRequest.xhr.onerror (C:\Users\jorge\Documents\testingreact\React-Testing-For-Beginners\node_modules\whatwg-fetch\fetch.js:436:16)

Это мой компонент:

class MoviesList extends PureComponent {
  state = {
    movies: [],
  };

  async componentDidMount() {
    try {
      const res = await fetch(
        'https://api.themoviedb.org/3/discover/movie?api_key=APIKEY&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1',
      )
      const movies = await res.json();
      if (movies.success) {
        this.setState({
          movies: movies.results,
        })
      }
    } catch (e) {
      console.log(e);
    }
  }

  render() {
   ...stuff
}

Затем в моем тесте я высмеиваю результат и устанавливаю свойство для ответа с именем success на истину

Таким образом, ошибка перехвата не должна вызываться, однако console.log в блоке перехвата регистрируется.

Вот тест:

global.fetch = require('jest-fetch-mock')

afterEach(() => {
  cleanup
})

const movies = {
  success: true,
  results: [
    {
      id: 'hi1',
      title: 'title1',
      poster_path: 'gfdsftg'
    },
    {
      id: 'hi2',
      title: 'title2',
      poster_path: 'gfdsftg'
    }
  ]
}

const movie = movies.results[0]

test('<MoviesList />', async  () => {
  fetch.mockResponseOnce(JSON.stringify(movies))
  const {getByTestId, queryByTestId, getAllByTestId} = render(<MoviesList />)

  ...some assertions here that all pass
})  

Почему срабатывает блок захвата?

...