关于jest:Jest-React-Native-Mock-AppState-TypeError

159次阅读

共计 955 个字符,预计需要花费 3 分钟才能阅读完成。

问题记录

背景:通过 Jest 和 React Testing Library 对 React Native 做自动化测试
问题:代码中呈现 AppState 的应用

import {AppState} from 'react-native';
AppState.removeEventListener('change', handleAppStateChange);

报错:TypeError: import_react_native.AppState.removeEventListener is not a function

jest.config.js 配置应用了 React Native 预设

module.exports = {
preset: 'react-native',
...

通过排查发现是因为 React Native 提供的 jest mock 文件缺失局部办法

门路:*/react-native/jest/setup.js

.mock('react-native/Libraries/AppState/AppState', () => ({addEventListener: jest.fn(() => ({remove: jest.fn(),
})),
}))

解决方案:

我的项目长期计划是将 packages/react-native/jest/setup.js 拷贝下来,减少 react-native/Libraries/AppState/AppState 模块的 removeEventListener 和 currentState 办法的 mock

.mock('react-native/Libraries/AppState/AppState', () => ({addEventListener: jest.fn(() => ({remove: jest.fn(),
})),
removeEventListener: jest.fn(),
currentState: jest.fn(),}))

而后放在我的项目仓库中在 jest.setup.js 文件头部引入

或者在 jest.config.js 的 setupFilesAfterEnv 入口引入

最初,这个缺点我曾经给 React Native 官网仓库提了 Pull Request,曾经合并主分支了

原文链接:https://w3cay.com/post/db420c1d.html

正文完
 0