首页 > 解决方案 > React Native Jest Expo-Native 模块不能为空

问题描述

我已经安装了 jest-expo,但是当我运行测试时出现错误:

react-native/jest-preset contained different transformIgnorePatterns than expected

Invariant Violation: Native module cannot be null.

      at invariant (node_modules/invariant/invariant.js:40:15)
      at new NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:36:7)
      at new EventEmitter (node_modules/@unimodules/react-native-adapter/src/EventEmitter.ts:24:26)
      at Object.<anonymous> (node_modules/expo/src/ScreenOrientation/ScreenOrientation.ts:26:35)
      at Object.<anonymous> (node_modules/expo/src/Expo.ts:6:1)

我的 package.json 包含:

"jest": {
    "preset": "jest-expo",
      "setupFiles": ["./jest/setup.js"],
    "transformIgnorePatterns": [
      "node_modules/(?!(jest-)?react-native|react-clone-referenced-element|@react-native-community|expo(nent)?|@expo(nent)?/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|@sentry/.*)"
    ]
  }

在我的setup.js文件中,我有:

jest.mock('Linking', () => {
  return {
    addEventListener: jest.fn(),
    removeEventListener: jest.fn(),
    openURL: jest.fn(),
    canOpenURL: jest.fn(),
    getInitialURL: jest.fn(),
  }
})

我的测试很简单:

import React from 'react';
import renderer from 'react-test-renderer';

import App from '../App';

describe('<App />', () => {
  it('has 1 child', () => {
expect(1).toBe(1);
  });
});

仅当我导入App模块时才会发生错误。我试图弄清楚如何ScreenOrientation在文件中添加模块,setup.js但我无法使其工作。

标签: react-nativejestjs

解决方案


添加:

jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter.js', () => {
  const { EventEmitter } = require('events');
  return EventEmitter;
});

setup.js文件中解决了问题


推荐阅读