Jest+Enzyme测试无法Mock构造函数属性 报EventSource未定义错误
解决方案
你可以直接全量Mock CacheHandler 模块,替换为满足render props契约的简单模拟组件,即可绕开原组件构造函数内的所有问题逻辑。
步骤1:在测试文件顶部添加模块Mock
jest.mock会自动提升到所有导入逻辑之前执行,直接替换目标模块的导出内容:
// 路径替换为你实际的CacheHandler文件路径 jest.mock('../../components/utilities/CacheHandler', () => { // 直接返回模拟的函数组件,完全符合原组件的调用契约 return function MockCacheHandler(props) { // 直接调用children方法,传入你需要的固定状态和空实现方法 return props.children({ loading: false, isLatestVersion: false, refreshCacheAndReload: jest.fn() }); }; });
步骤2:保留原有测试用例不变
添加上面的Mock代码后,你原来的测试代码不需要做任何修改,运行时AdminAppCore内部嵌套的CacheHandler会自动替换为模拟组件,不会执行原组件的构造函数逻辑,自然也不会抛出EventSource is not defined的错误。
之前方案失败的原因
- 直接修改
CacheHandler变量失败:ES模块默认导出的属性是只读的,不允许直接赋值修改 - 模块Mock返回内容错误:之前的Mock返回的是普通函数执行后的对象,不是合法的React组件,render方法的
this指向异常,所以会报this.props.children is not a function错误 - spyOn失败:
refreshCacheAndReload是挂载在组件state上的属性,不是组件实例的原型方法,spyOn无法直接监听
内容的提问来源于stack exchange,提问作者littlesvensson
相关产品推荐
相关产品推荐

