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
相关产品推荐
相关产品推荐

