Mar*_*ski 9 jsx reactjs react-router enzyme
我已经切换到路由器v4的反应,很少有测试需要重新实现.我有以下场景:
对于旧的路由器来说这很容易..但是新的路由器很难:
例如Link,如果包含组件(或子组件),则意味着我们必须提供适当的contxt来呈现组件.这就是为什么MemoryRouter创造了:
const comp = mount(
<MemoryRouter>
<Comp {...someProps} />
</MemoryRouter>
);
//here comes assertion about spy getting called
Run Code Online (Sandbox Code Playgroud)
感谢我们能够渲染组件(更多信息:https://reacttraining.com/react-router/web/guides/testing)但是..如果我们看一下setProps酶库的方法(http:// airbnb.io/enzyme/docs/api/ReactWrapper/setProps.html):
一种设置根组件的道具并重新渲染的方法.
这意味着如果我调用comp.setProps({.. newProps}),它实际上会更改路径props(MemoryRouter),但不会改变我的组件道具,这很糟糕.
对此类案件的任何见解?
您可以在MemoryRouter周围编写包装器,并将所有支持传递给需要测试的节点.
const CompWrappedWithMemoryRouter = (props) => {
return (
<MemoryRouter>
<Comp {...props />
</MemoryRouter>
)
}
Run Code Online (Sandbox Code Playgroud)
然后当然使用它
const comp = mount(
<CompWrappedWithMemoryRouter {...someProps} />
);
Run Code Online (Sandbox Code Playgroud)
现在comp.setProps应该工作
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |