我正在用玩笑和酶对我的React应用程序进行单元测试,直到我碰巧测试了与Redux连接的类组件为止,一切都很好。我继续进行了测试,通过用a包裹组件,然后将其浅层安装。但是,我无法模拟连接的组件中定义的静态方法的返回值。
下面是我的示例代码:
const wrapper = shallow(
<Provider store={store}>
<TestComponent {...props} />
</Provider>
).dive();
现在,当我尝试模拟在TestComponent中定义的静态方法的返回值时,它没有任何作用,它会失败:
TestComponent.myStaticMethod = jest.fn().mockReturnValue(true);
有趣的部分是,如果我在redux文档中也将未连接的组件也导出为suggested,则上述模拟语法效果很好。仅出于测试目的而导出未连接的组件是否可以?我尝试在浅层之前进行模拟,然后再进行浅层模拟,但两种方法均无效。
[connect
返回一个新组件,因此您不能以这种方式覆盖已包装组件的静态方法,(这不是像安德鲁所说的好主意)]
但是假设这是您想要做的,您可以从connect
模拟react-redux
函数以返回原始组件
然后将它从mapStateToProps
和mapDispatchToProps
获得的所有道具传递为标准React道具
import MyComponent from './MyComponent';
jest.mock('react-redux' () => ({
connect: () => Component => Component
}))
MyComponent.myStaticMethod = jest.fn().mockReturnValue(true);
shallow(<MyComponent {...props}/>)