反应路由器4和酶

时间:2017-05-24 07:44:20

标签: reactjs react-router jsx enzyme

我已经切换到路由器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) 但是..如果我们看看酶库(http://airbnb.io/enzyme/docs/api/ReactWrapper/setProps.html)的setProps方法:

  

设置根组件的道具并重新渲染的方法。

这意味着如果我调用comp.setProps({.. newProps}),它实际上会更改路径道具(MemoryRouter),但不会改变我的组件道具,这很糟糕。

对此类案件的任何见解?

1 个答案:

答案 0 :(得分:7)

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

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

然后使用它当然

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

现在comp.setProps应该正常工作