2017-05-24 96 views
6

我切换到反应路由器v4和少数测试需要重新实现。 我有以下情形:反应路由器4和酶

  • 安装的组件(检查,如果了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):

一种设置根组件的道具并重新呈现的方法。

这意味着,如果我叫comp.setProps({.. newProps}),它实际上改变了路线道具(MemoryRouter),但并没有改变我的组件的道具,其吸得要命。

有关这种情况的任何见解?

回答

5

您可以在MemoryRouter上编写包装并将所有道具传递给需要测试的节点。

const CompWrappedWithMemoryRouter = (props) => { 
    return (
     <MemoryRouter> 
      <Comp {...props /> 
     </MemoryRouter> 
    ) 
} 

然后用它当然

const comp = mount(
     <CompWrappedWithMemoryRouter {...someProps} /> 
    ); 

现在comp.setProps应该工作