You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中启用可达性需传入NetInfo至networkMonitor,及使用aws-amplify Auth的快照测试报错求助

解决AWS Amplify在React Native中启用可达性时NetInfo传入问题及快照测试失败问题

我之前也碰到过完全一样的问题,这个错误的核心原因是AWS Amplify的Reachability模块在React Native环境下,必须依赖NetInfo来检测网络连接状态——不管是应用正常运行时,还是快照测试的模拟环境中,都需要正确配置这个依赖。下面分两部分给出具体的解决步骤:

一、正常应用运行时的配置

首先要确保你已经安装了NetInfo依赖,然后在Amplify初始化时把它传入networkMonitor配置项:

  1. 安装NetInfo依赖
    在项目根目录执行:
npm install @react-native-community/netinfo
# 或者用yarn
yarn add @react-native-community/netinfo

如果是iOS项目,安装后记得执行npx pod-install来完成原生依赖的配置。

  1. 修改Amplify初始化代码
    找到你项目中初始化Amplify的文件(通常是src/aws-exports.js或者专门的配置文件),添加networkMonitor配置:
import { Amplify } from 'aws-amplify';
import NetInfo from '@react-native-community/netinfo';
import awsconfig from './aws-exports';

Amplify.configure({
  ...awsconfig,
  // 配置networkMonitor,传入NetInfo作为处理程序
  networkMonitor: {
    handler: NetInfo,
  },
});

这样配置后,应用运行时就不会再弹出"需将NetInfo传入networkMonitor"的提示了。

二、快照测试的修复方案

快照测试失败是因为测试环境没有原生React Native环境支撑NetInfo的正常运行,我们需要通过Mock来模拟NetInfo的行为,或者直接Mock Amplify的Reachability模块:

方案1:Mock NetInfo模块

在你的测试文件顶部添加以下Mock代码,模拟NetInfo的核心方法:

jest.mock('@react-native-community/netinfo', () => ({
  // 模拟网络状态监听方法
  addEventListener: jest.fn(),
  removeEventListener: jest.fn(),
  // 模拟获取网络状态,返回已连接状态
  fetch: jest.fn().mockResolvedValue({ isConnected: true }),
}));

这样Amplify在测试时调用NetInfo的方法就不会抛出错误了。

方案2:Mock Amplify内部的Reachability模块

如果不想Mock NetInfo,也可以直接Mock Amplify的Reachability原生模块,跳过真实的网络检测逻辑:

jest.mock('@aws-amplify/core/src/Util/Reachability.native', () => ({
  ReachabilityNavigator: {
    networkMonitor: jest.fn(),
  },
}));

方案3:在测试前初始化Amplify时传入Mock的networkMonitor

你也可以在测试的beforeEach钩子中,重新配置Amplify,传入一个Mock的networkHandler:

import { Amplify } from 'aws-amplify';

beforeEach(() => {
  Amplify.configure({
    networkMonitor: {
      handler: {
        addEventListener: jest.fn(),
        fetch: jest.fn().mockResolvedValue({ isConnected: true }),
      },
    },
  });
});

这几个方案都能解决快照测试时的报错问题,你可以根据自己的测试习惯选择其中一种。

内容的提问来源于stack exchange,提问作者chandan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:02:51