首页 文章

Jest:react-router测试返回undefined 'params'

提问于
浏览
0

我正在尝试使用 MemoryRouter 测试一个组件,如React-router docs中所示,初始条目已设置,因此我可以在包装组件中包含params .

组件示例:

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>

在测试中(从Enzyme开始,匹配未定义):

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

所以我使用了这种解决方法,但为什么initialEntries不能单独工作?

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

1 回答

  • 1

    测试中没有 Route ,因此不会进行匹配,并且 this.props.match 将未定义 Vidactic . 添加路线应该使它工作:

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

    为避免重复路由,您可能希望将 <Switch>..</Switch> 部分放在单独的组件中并在测试中使用它 .

相关问题