When using the module react-native-push-notification, I had this error: 
 FAIL  __tests__/index.android.js
  ● Test suite failed to run
    Invariant Violation: Native module cannot be null.
      at invariant (node_modules/fbjs/lib/invariant.js:44:15)
      at new NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:32:1)
      at Object.<anonymous> (node_modules/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.js:18:29)
      at Object.get PushNotificationIOS [as PushNotificationIOS] (node_modules/react-native/Libraries/react-native/react-native.js:97:34)
      at Object.<anonymous> (node_modules/react-native-push-notification/component/index.ios.js:10:23)
I tried to mock the module by creating __mocks__/react-native.js and putting this code within it:
const rn = require('react-native')
jest.mock('PushNotificationIOS', () => ({
  addEventListener: jest.fn(),
  requestPermissions: jest.fn(),
  then: jest.fn()
}));
module.exports = rn
Now, I have this error:
 FAIL  __tests__/index.android.js
  ● Test suite failed to run
    TypeError: Cannot read property 'then' of null
      at Object.<anonymous>.Notifications.popInitialNotification (node_modules/react-native-push-notification/index.js:278:42)
      at Object.<anonymous>.Notifications.configure (node_modules/react-native-push-notification/index.js:93:6)
      at Object.<anonymous> (app/utils/localPushNotification.js:4:39)
      at Object.<anonymous> (app/actions/trip.js:5:28)
How I could mock fully this module the right way?
I mocked the module PushNotificationIOS by creating a setup file jest/setup.js:
jest.mock('PushNotificationIOS', () => {
  return {
    addEventListener: jest.fn(),
    requestPermissions: jest.fn(() => Promise.resolve()),
    getInitialNotification: jest.fn(() => Promise.resolve()),
  }
});
I've configured jest to run this setup file by adding this line into packages.json:
  "jest": {
    ...
    "setupFiles": ["./jest/setup.js"],
  }
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With