首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用react路由器v4测试安装的组件

用react路由器v4测试安装的组件
EN

Stack Overflow用户
提问于 2017-06-28 13:43:44
回答 1查看 1.1K关注 0票数 1

我正在将我们的应用程序迁移到react-router@4.x,在获得使用enzymemount函数的测试时遇到了困难。

每当我挂载具有withRouter-wrapped子组件的组件时,都会遇到麻烦。

下面是我正在测试的一个简化情况的示例:

代码语言:javascript
复制
class SomePage extends React.Component {
  componentDidMount() {
    this.props.getData();
  }
  render() {
    return (
      <div>
        <ComponentWrappedInWithRouter />
      </div>
    );
  }
}

const Component = (props) => (
  <button onClick={() => this.props.history.push('/new-route') }>
    Click to navigate
  </button>
);

const ComponentWrappedInWithRouter = withRouter(Component);

现在,我想测试一下,SomePage在挂载后调用了它的支柱getData。愚蠢的例子,我知道,但结构应该是足够的。

每当我编写使用enzymemount的测试时,我都会得到以下错误:

代码语言:javascript
复制
TypeError: Cannot read property 'route' of undefined
  at Route.computeMatch (node_modules/react-router/Route.js:68:22)
  at new Route (node_modules/react-router/Route.js:47:20)

现在,我认为发生这种情况的原因是,我试图为上下文中没有router的组件调用router--也就是说,它没有被包装在<BrowserRouter />或其兄弟姐妹中。

这不是react-router@3.x的问题,但由于目前的专业是完全重写,我完全理解这些问题会出现。

我有什么办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 14:15:38

非常简单:将您的组件从MemoryRouter中从react-router-dom中包装起来,您就可以继续了。

https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/MemoryRouter.md

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44804268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档