所连接组件的静态方法的嘲笑返回值

问题描述 投票:0回答:1

我正在用玩笑和酶对我的React应用程序进行单元测试,直到我碰巧测试了与Redux连接的类组件为止,一切都很好。我继续进行了测试,通过用a包裹组件,然后将其浅层安装。但是,我无法模拟连接的组件中定义的静态方法的返回值。

下面是我的示例代码:

const wrapper = shallow(
    <Provider store={store}>
        <TestComponent {...props}  />
    </Provider>
).dive();

现在,当我尝试模拟在TestComponent中定义的静态方法的返回值时,它没有任何作用,它会失败:

TestComponent.myStaticMethod = jest.fn().mockReturnValue(true);

有趣的部分是,如果我在redux文档中也将未连接的组件也导出为suggested,则上述模拟语法效果很好。仅出于测试目的而导出未连接的组件是否可以?我尝试在浅层之前进行模拟,然后再进行浅层模拟,但两种方法均无效。

reactjs unit-testing redux jestjs enzyme
1个回答
0
投票

[connect返回一个新组件,因此您不能以这种方式覆盖已包装组件的静态方法,(这不是像安德鲁所说的好主意)]

但是假设这是您想要做的,您可以从connect模拟react-redux函数以返回原始组件

然后将它从mapStateToPropsmapDispatchToProps获得的所有道具传递为标准React道具

import MyComponent from './MyComponent';

jest.mock('react-redux' () => ({
   connect: () => Component => Component
}))

MyComponent.myStaticMethod = jest.fn().mockReturnValue(true);


shallow(<MyComponent {...props}/>)
© www.soinside.com 2019 - 2024. All rights reserved.