香港专业教育学院切换到路由器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方法:


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


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

对这种情况有什么见解?

最佳答案

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

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


然后使用它

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


现在comp.setProps应该可以工作

07-28 06:40