You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:15:02