React Router 4 和酶
Posted
技术标签:
【中文标题】React Router 4 和酶【英文标题】:React Router 4 and enzyme 【发布时间】:2017-10-24 10:11:54 【问题描述】:我已经切换到 react 路由器 v4 并且需要重新实现一些测试。 我有以下情况:
安装组件(检查是否调用了methodA) 通过酶包装方法更改道具:setProps 检查方法是否被调用了两次这在旧路由器上相当容易......但在新路由器上就很难了:
如果组件(或子组件)包含例如Link
,这意味着我们必须提供适当的contxt 来渲染组件。这就是创建MemoryRouter
的原因:
const comp = mount(
<MemoryRouter>
<Comp ...someProps />
</MemoryRouter>
);
//here comes assertion about spy getting called
感谢我们能够渲染组件(更多信息:https://reacttraining.com/react-router/web/guides/testing)
但是..如果我们看一下酶库中的setProps
方法(http://airbnb.io/enzyme/docs/api/ReactWrapper/setProps.html):
设置根组件的 props 并重新渲染的方法。
这意味着如果我调用 comp.setProps(..newProps),它实际上会更改路由道具 (MemoryRouter
),但不会更改我的组件道具,这太糟糕了。
对此类案例有何见解?
【问题讨论】:
【参考方案1】:您可以围绕 MemoryRouter 编写包装器并将所有道具传递给需要测试的节点。
const CompWrappedWithMemoryRouter = (props) =>
return (
<MemoryRouter>
<Comp ...props />
</MemoryRouter>
)
然后当然使用它
const comp = mount(
<CompWrappedWithMemoryRouter ...someProps />
);
现在comp.setProps
应该可以工作了
【讨论】:
以上是关于React Router 4 和酶的主要内容,如果未能解决你的问题,请参考以下文章
react-router 4.0、react-router-dom 和 react-router-redux 有啥区别?
[react-router] React-Router 4中<Router>组件有几种类型?
[react-router] React-Router 3和React-Router 4有什么变化?添加了什么好的特性?