共计 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
正文完