【问题标题】:react-native-firebase-messaging mocking with jestreact-native-firebase-messaging 用玩笑模拟
【发布时间】:2019-12-02 18:40:40
【问题描述】:

我正在尝试从 @react-native-firebase/messaging 模拟 Firebase 云消息传递 (FCM)。到目前为止,这是我的模拟:

jest.mock('@react-native-firebase/messaging', () => ({
  hasPermission: jest.fn(() => Promise.resolve(true)),
  subscribeToTopic: jest.fn(),
  deleteToken: jest.fn(),
  unsubscribeFromTopic: jest.fn(),
  registerForRemoteNotifications: jest.fn(),
  requestPermission: jest.fn(() => Promise.resolve(true)),
  getToken: jest.fn(() => Promise.resolve('myMockToken')),
  getAPNSToken: jest.fn(() => Promise.resolve('myMockToken')),
  onTokenRefresh: jest.fn(() => Promise.resolve('myMockToken')),
  onMessage: jest.fn(),
  isRegisteredForRemoteNotifications: jest.mock(false),
  isAutoInitEnabled: jest.mock(false),
}));

但是当我运行测试时,我得到:

   Invariant Violation: Native module cannot be null.

      at invariant (packages/mobile/node_modules/invariant/invariant.js:40:15)
      at RNFBNativeEventEmitter.invariant (packages/mobile/node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:36:7)
      at new RNFBNativeEventEmitter (node_modules/@react-native-firebase/messaging/node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:24:5)
      at Object.<anonymous> (node_modules/@react-native-firebase/messaging/node_modules/@react-native-firebase/app/lib/internal/RNFBNativeEventEmitter.js:48:16)
      at Object.<anonymous> (node_modules/@react-native-firebase/messaging/node_modules/@react-native-firebase/app/lib/internal/registry/nativeModule.js:21:1)

这告诉我我仍然需要模拟一些其他功能。我在这里缺少什么?

【问题讨论】:

  • 提供你要测试的代码

标签: unit-testing react-native jestjs


【解决方案1】:

我发现我没有正确地嘲笑。我创建了一个

__mocks__/@react-native-firebase/messaging.js. 

在我写的那个文件中:

module.exports = {
  hasPermission: jest.fn(() => Promise.resolve(true)),
  subscribeToTopic: jest.fn(),
  unsubscribeFromTopic: jest.fn(),
  requestPermission: jest.fn(() => Promise.resolve(true)),
  getToken: jest.fn(() => Promise.resolve('myMockToken')),
};


另外,在我的设置中,我有:

reactNative.NativeModules.RNCNetInfo = {
  getCurrentState: jest.fn(() => Promise.resolve()),
  addListener: jest.fn(),
  removeListeners: jest.fn(),
};

【讨论】:

  • 你能添加整个代码来测试@react-native-firbase/app
猜你喜欢
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2023-03-27
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多