首页 > 解决方案 > 如何正确模拟 react-native-firebase v6

问题描述

我在react-native-firebase repo上打开了一个问题,但也许有人可以在这里更快地回答我的问题。

嘿,我正在我们的代码库中将 firebase v5 更新为 firebase v6,主要集成已完成,现在我正试图让我们的测试套件通过,我已经设法通过以下方式模拟 firebases 模块:

jest.mock('@react-native-firebase/messaging', () => {
  return () => ({
    hasPermission: jest.fn(() => Promise.resolve(true)),
    subscribeToTopic: jest.fn(),
    unsubscribeFromTopic: jest.fn(),
    requestPermission: jest.fn(() => Promise.resolve(true)),
    getToken: jest.fn(() => Promise.resolve('myMockToken')),
    onMessage: jest.fn(),
    onNotificationOpenedApp: jest.fn(),
    getInitialNotification: jest.fn(() => Promise.resolve(false))
  })
})

jest.mock('@react-native-firebase/crashlytics', () => ({}))

jest.mock('@react-native-firebase/app', () => {
  return () => ({
    onNotification: jest.fn(),
    onNotificationDisplayed: jest.fn()
  })
})

jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter')
// jest.mock('@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter')

你可以看到我不得不模拟 RN NativeEventEmitter,我不确定它是否是最好的选择,无论如何,它可以让我们几乎所有的测试套件都变成绿色,但是有一个测试失败了:

$ jest --forceExit src/Sagas/InAppServicesSaga.test.js
 FAIL  src/Sagas/InAppServicesSaga.test.js
  ● Test suite failed to run

    TypeError: Super expression must either be null or a function

      at _inherits (node_modules/@babel/runtime/helpers/inherits.js:5:11)
      at node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:29:26
      at Object.<anonymous> (node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:71:2)
      at Object.<anonymous> (node_modules/@react-native-firebase/app/lib/internal/registry/nativeModule.js:21:1)

我也尝试过模拟 RNFBNativeEventEmitter 对象,但这似乎不起作用,有推荐的方法来模拟包吗?或者我可能做错了什么?

标签: javascriptreact-nativejestjsreact-native-firebase

解决方案


推荐阅读