Jest: тесты реагирующего маршрутизатора возвращают неопределенные «параметры» - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь протестировать компонент с MemoryRouter, как указано в документах React-router, с начальными заданными записями, чтобы у меня могли быть параметры внутри упакованного компонента.

Пример компонента:

render () {
  console.log(this.props.match.params.item)
}

В приложении (отлично работает):

<Router>
  <Switch>
    <Route exact path='/' render={() => (
      <Redirect to={`/${guessLocale()}`} />
    )} />
    <Route exact path='/:lang' component={Home} />
    <Route exact path='/:lang/:itemName' component={Vidactic} />
  </Switch>
</Router>

В тесте (монтирование из фермента совпадение не определено):

mount(<MemoryRouter initialEntries={['/fr/pamp']}>
  <Vidactic />
</MemoryRouter>)

Итак, я использовал этот обходной путь, но почему initialEntries не будет работать сам по себе?

mount(<MemoryRouter initialEntries={['/fr/pamp']}>
  <Vidactic match={{ params: { item: 'pamp' } }} />
</MemoryRouter>)

1 Ответ

0 голосов
/ 03 июля 2018

В вашем тесте нет Route, поэтому сопоставление не будет, и this.props.match будет неопределенным для Vidactic. Добавление маршрута должно заставить его работать:

mount(
  <MemoryRouter initialEntries={['/fr/pamp']}>
    <Route exact path="/:lang/:itemName" component={Vidactic} />
  </MemoryRouter>
);

Чтобы избежать дублирования маршрутов, вы можете поместить деталь <Switch>..</Switch> в отдельный компонент и использовать ее в своих тестах.

...