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

React Native Jest中模拟Native Module的正确方法咨询

Jest 模拟 React Native Native模块 正确方法

一、自定义Native模块 UtilityFunc 的正确模拟

你原来的代码错误在于对象字面量中直接使用UtilityFunc.getConstants这种嵌套属性写法,不符合JS对象定义规则。正确做法是先定义UtilityFunc对象,再将getConstants作为其属性:

jest.mock('NativeModules', () => ({
  UtilityFunc: {
    // 模拟getConstants方法,可指定测试需要的返回值
    getConstants: jest.fn(() => ({
      appVersion: '1.0.0'
    }))
  }
}));

测试用例示例

在测试中验证模块调用逻辑:

import { NativeModules } from 'react-native';

describe('UtilityFunc 模拟测试', () => {
  it('获取应用版本应返回模拟值', () => {
    const constants = NativeModules.UtilityFunc.getConstants();
    expect(constants.appVersion).toBe('1.0.0');
    expect(NativeModules.UtilityFunc.getConstants).toHaveBeenCalled();
  });

  it('可动态修改模拟返回值', () => {
    NativeModules.UtilityFunc.getConstants.mockReturnValue({ appVersion: '2.0.0' });
    const constants = NativeModules.UtilityFunc.getConstants();
    expect(constants.appVersion).toBe('2.0.0');
  });
});

二、react-native-device-info 模块的模拟

对于react-native-device-info这类第三方Native模块,直接mock整个模块更简洁,无需依赖NativeModules的模拟:

jest.mock('react-native-device-info', () => ({
  // 模拟你用到的方法,按需添加
  getVersion: jest.fn(() => '1.0.0'),
  getBuildNumber: jest.fn(() => '100')
}));

测试用例示例

import DeviceInfo from 'react-native-device-info';

describe('react-native-device-info 模拟测试', () => {
  it('获取版本号应返回模拟值', () => {
    const version = DeviceInfo.getVersion();
    expect(version).toBe('1.0.0');
    expect(DeviceInfo.getVersion).toHaveBeenCalled();
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:45:54