react-native-background-timer icon indicating copy to clipboard operation
react-native-background-timer copied to clipboard

Jest: Invariant Violation: `new NativeEventEmitter()` requires a non-null argument.

Open shensven opened this issue 2 years ago • 18 comments

The following error will be reported if jest is not configured

 FAIL  __tests__/App-test.tsx
  ● Test suite failed to run

    Invariant Violation: `new NativeEventEmitter()` requires a non-null argument.

       6 | import {IconButton, TouchableRipple} from 'react-native-paper';
       7 | import Ionicons from 'react-native-vector-icons/Ionicons';
    >  8 | import BackgroundTimer from 'react-native-background-timer';
         | ^
       9 | import dayjs from 'dayjs';
      10 | import relativeTime from 'dayjs/plugin/relativeTime';
      11 | import 'dayjs/locale/zh-cn';

      at invariant (node_modules/invariant/invariant.js:40:15)
      at new NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:44:7)
      at Object.<anonymous> (node_modules/react-native-background-timer/index.js:10:17)
      at Object.<anonymous> (src/screens/Home.tsx:8:1)
      at Object.<anonymous> (App.tsx:6:1)
      at Object.<anonymous> (__tests__/App-test.tsx:7:1)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        4.29 s, estimated 7 s
Ran all test suites.
error Command failed with exit code 1.

So maybe we should configure jest manually, like:

// jest.setup.js
jest.doMock('react-native-background-timer', () => {
  return {
    stopBackgroundTimer: jest.fn(),
    runBackgroundTimer: jest.fn(),
  };
});

This allows the unit tests to pass with flying colors

repo here: https://github.com/shensven/ReadHubn/tree/5806faf354fbd178827aff9985efe4dea906c24d

test here: https://github.com/shensven/ReadHubn/runs/3824410010?check_suite_focus=true

shensven avatar Oct 07 '21 08:10 shensven