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
相关产品推荐
相关产品推荐

