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

React Native Jest测试遇NativeEventEmitter系列报错,求解决方案

解决Jest测试中NativeEventEmitter相关构造函数错误

针对你遇到的问题,核心原因是第三方库react-native-quantum-metric-library在初始化时依赖NativeEventEmitter的特定结构,之前的mock方式要么缺失必要属性,要么导出结构不匹配。以下是可行的解决方案:

方案一:Mock React Native的NativeEventEmitter(推荐)

保留React Native其他模块的原有实现,仅替换NativeEventEmitter为模拟构造函数,同时提供库需要的方法:

jest.mock('react-native', () => {
  const originalRN = jest.requireActual('react-native');
  return {
    ...originalRN,
    NativeEventEmitter: jest.fn(() => ({
      addListener: jest.fn(),
      removeListener: jest.fn(),
      removeAllListeners: jest.fn(),
    })),
  };
});

方案二:直接Mock NativeEventEmitter文件

如果库是直接导入NativeEventEmitter的具体文件,可使用这种方式:

jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter', () => {
  class MockNativeEventEmitter {
    constructor() {}
    // 根据库的实际调用添加必要方法
    addListener = jest.fn();
    removeAllListeners = jest.fn();
  }
  return MockNativeEventEmitter;
});

补充:解决eventType设置错误

第二个报错提示无法给undefined设置eventType,说明库在尝试访问自身NativeModule的属性,需要同时mock该库的导出:

jest.mock('react-native-quantum-metric-library', () => ({
  // 模拟库的NativeModule及所需属性
  QuantumMetric: {
    eventType: 'mock-event',
    // 可根据测试需求添加其他方法或属性
  },
}));

为什么之前的方法无效?

  • 直接jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter')会生成一个空mock,库内部调用时找不到必要的属性,导致eventType设置失败。
  • 替换为Node的EventEmitter后,与React Native的NativeEventEmitter结构不匹配,库从react-native导出中获取的NativeEventEmitter不是预期的构造函数,因此报错。

内容的提问来源于stack exchange,提问作者Shariq Ahmed -

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:06:54