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

问题记录

背景:通过 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

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据