react-native - 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
但我无法使其工作。
解决方案
添加:
jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter.js', () => {
const { EventEmitter } = require('events');
return EventEmitter;
});
在setup.js
文件中解决了问题
推荐阅读
- mongodb - 将 json 文件导入 mongodb atlas 集合
- sql - Oracle SQL 最接近给定日期的日期
- https - HSTS 阻止访问使用主机和使用自签名证书映射到本地主机的子域
- sql-server - 在 Visual Basic 中连接到自己制作的 SQL 数据库不起作用
- c# - AutoMapper .AfterMap() 与 .ForMember()
- javascript - 三个js,什么是toArray
- prolog - SWI-Prolog 使用位移 CLPFD 报告错误答案
- bash - 使用 grep 在 MacOs ifconfig 上仅具有接口名称和 MAC 地址
- arrays - 在 ruby 中将 JSON 数组数据转换为字符串的快捷方式
- powershell - Select-Object -First 影响管道中的先前 cmdlet