使用react-router v4测试已安装的组件

时间:2017-06-28 13:43:45

标签: reactjs testing react-router enzyme

我正在将我们的应用程序迁移到react-router@4.x,而且我在使用enzyme的{​​{1}}函数进行测试时遇到了麻烦。

每当我挂载一个包含mount包裹的子组件的组件时,我都会遇到麻烦。

以下是我正在测试的简化情况示例:

withRouter

现在,我想测试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。愚蠢的例子,我知道,但结构应该足够了。

每当我编写使用enzyme的{​​{1}}的测试时,我都会收到以下错误:

mount

现在,我认为发生这种情况的原因是因为我尝试在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) 上调用上下文中没有withRouter的组件 - 即它没有包含在router中或其中一个兄弟姐妹。

这不是<BrowserRouter />的问题,但由于目前的专业是完全改写,我完全理解这些问题会出现。

关于如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

非常简单:将您正在测试的组件包裹在MemoryRouter的{​​{1}}中,然后您就可以了。

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