我正在将我们的应用程序迁移到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 />
的问题,但由于目前的专业是完全改写,我完全理解这些问题会出现。
关于如何解决此问题的任何想法?
答案 0 :(得分:0)
非常简单:将您正在测试的组件包裹在MemoryRouter
的{{1}}中,然后您就可以了。