TypeError:超级表达式必须为 null 或 React Native 中的函数
Posted
技术标签:
【中文标题】TypeError:超级表达式必须为 null 或 React Native 中的函数【英文标题】:TypeError: Super expression must either be null or a function in React native 【发布时间】:2021-10-20 12:32:03 【问题描述】:我正在尝试使用 jest 和 react 测试工具来测试我的 react-native 应用程序的组件。
但是 react-native-firebase 总是返回“TypeError: Super expression must be null or a function in React native”。即使我使用他们嘲笑的方法。
我花了很多时间试图弄清楚如何解决它,并尝试了另一种我目前陷入困境并且我不知道如何解决它的方法。
错误详情
● Test suite failed to run
TypeError: Super expression must either be null or a function
(node_modules/@babel/runtime/helpers/inherits.js:5:11)
node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:25:26
<anonymous> (node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:61:2)
(node_modules/@react-native-firebase/app/lib/internal/registry/nativeModule.js:21:1)
jest.config.js 文件
module.exports =
preset: "react-native",
setupFiles: ['./jest.setup.js'],
transform: ,
"transformIgnorePatterns": [
"node_modules/(?!(@react-native|react-native|react-native-vector-icons|react-native-material-kit|@invertase|react-native-keyboard-aware-scrollview|react-native-easy-toast|react-native-image-picker|react-native-webview|react-native-background-upload|@react-native-firebase)/)"
],
"setupFilesAfterEnv": [
"@testing-library/jest-native/extend-expect"
]
jest.setup.js 文件
import * as ReactNative from 'react-native';
jest.doMock('react-native', () =>
return Object.setPrototypeOf(
Platform:
OS: 'android',
select: () => ,
,
NativeModules:
...ReactNative.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(),
,
,
,
ReactNative,
);
);
有什么想法吗?
【问题讨论】:
【参考方案1】:我遇到了同样的问题,我的解决方案是
jest.doMock('react-native', () =>
return Object.setPrototypeOf(
Platform:
OS: 'android',
select: () => ,
,
NativeModules:
...ReactNative.NativeModules,
RNFBAnalyticsModule:
logEvent: jest.fn(),
,
RNFBAppModule:
NATIVE_FIREBASE_APPS: [
appConfig:
name: '[DEFAULT]',
,
options: ,
,
appConfig:
name: 'secondaryFromNative',
,
options: ,
,
],
addListener: jest.fn(),
eventsAddListener: jest.fn(),
eventsNotifyReady: jest.fn(),
removeListeners: jest.fn(),
,
RNFBAuthModule:
APP_LANGUAGE:
'[DEFAULT]': 'en-US',
,
APP_USER:
'[DEFAULT]': 'jestUser',
,
addAuthStateListener: jest.fn(),
addIdTokenListener: jest.fn(),
useEmulator: jest.fn(),
,
RNFBMessagingModule:
onMessage: jest.fn(),
,
,
,
ReactNative,
);
);
jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter')
【讨论】:
以上是关于TypeError:超级表达式必须为 null 或 React Native 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
如何解决:TypeError:超级表达式必须为null或函数
扩展“组件”;未捕获的TypeError:超级表达式必须为null或函数,而不是对象[重复]
TypeError:超级表达式必须为空或函数,在 ReactJS 中未定义 [重复]
未捕获的类型错误:超级表达式必须为 null 或函数,而不是 undefined(...)