首页 文章

反应路由器4和酶

提问于
浏览
9

我已经切换到路由器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(),它实际上会更改路径道具( MemoryRouter ),但不会改变我的组件道具,这很糟糕 .

对此类案件的任何见解?

1 回答

  • 7

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

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

    然后当然使用它

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

    现在 comp.setProps 应该工作

相关问题