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

React Native用Jest测试时react-native-firebase报Super expression错误如何解决

错误根因

你在jest.setup.js中手动mock react-native时,覆盖了模块的原有导出,丢失了NativeEventEmitter类,react-native-firebase内部的RNFBNativeEventEmitter需要继承这个类,找不到符合要求的父类就触发了当前报错。

可行解决方案

方案1:优化react-native mock逻辑

修改jest.setup.js,先保留react-native的所有原生导出,再覆盖需要自定义的部分,避免丢失依赖的内置类:

import * as ReactNative from 'react-native';

// 替换doMock为mock,提升mock优先级
jest.mock('react-native', () => {
  // 引入react-native的真实导出作为基础
  const originalRN = jest.requireActual('react-native');
  return {
    ...originalRN,
    Platform: {
      ...originalRN.Platform,
      OS: 'android',
      select: jest.fn(),
    },
    NativeModules: {
      ...originalRN.NativeModules,
      RNFBAppModule: {
        NATIVE_FIREBASE_APPS: [
          {
            appConfig: {
              name: '[DEFAULT]',
            },
            options: {},
          },
          {
            appConfig: {
              name: 'secondaryFromNative',
            },
            options: {},
          },
        ],
        addListener: jest.fn(),
        eventsAddListener: jest.fn(),
        eventsNotifyReady: jest.fn(),
      },
      RNFBAuthModule: {
        APP_LANGUAGE: {
          '[DEFAULT]': 'en-US',
        },
        APP_USER: {
          '[DEFAULT]': 'jestUser',
        },
        addAuthStateListener: jest.fn(),
        addIdTokenListener: jest.fn(),
        useEmulator: jest.fn(),
      },
      RNFBCrashlyticsModule: {},
      RNFBDatabaseModule: {
        on: jest.fn(),
        useEmulator: jest.fn(),
      },
      RNFBFirestoreModule: {
        settings: jest.fn(),
        documentSet: jest.fn(),
      },
      RNFBPerfModule: {},
      RNFBStorageModule: {
        useEmulator: jest.fn(),
      },
    },
  };
});

方案2:使用官方预设mock

避免手动写mock遗漏配置,直接安装@react-native-firebase/jest-mock依赖,然后在jest.setup.js顶部添加一行引入即可,所有firebase相关模块会被自动mock:

import '@react-native-firebase/jest-mock'

额外校验项

  • 修改配置后先执行jest --clearCache清除jest缓存,再重新运行测试,避免缓存导致配置不生效
  • 确认你使用的react-native版本和react-native-firebase大版本匹配,避免版本不兼容导致的底层报错

内容的提问来源于stack exchange,提问作者Ulises Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:21:03