使用react-native-ble-manager时yarn test执行异常的问题求助
无需复杂Mock的react-native-ble-manager单元测试解决方案
以下是几个能快速让测试通过的简单方案,不用写复杂的mock逻辑:
方案1:直接全局Mock整个库
在你的测试配置文件(比如jest.setup.js)里添加全局mock,让所有测试用例自动适配:
jest.mock('react-native-ble-manager', () => ({ // 只mock业务代码里用到的方法,返回合适的默认值即可 start: jest.fn().mockResolvedValue(true), scan: jest.fn().mockResolvedValue(true), connect: jest.fn().mockResolvedValue(true), // 其他用到的方法同理,按需添加 }));
方案2:抽离BLE操作到自定义工具类
把所有react-native-ble-manager的调用封装到单独的工具类(比如BleUtils.js),测试时只mock这个自定义类:
// BleUtils.js import BleManager from 'react-native-ble-manager'; export const startBle = () => BleManager.start(); export const scanDevices = () => BleManager.scan([], 5); // 其他BLE操作都在这里统一封装 // 测试文件中mock工具类 jest.mock('../utils/BleUtils', () => ({ startBle: jest.fn().mockResolvedValue(true), scanDevices: jest.fn().mockResolvedValue([]), }));
这种方式比直接mock第三方库更简洁,只需要对应自己封装的方法即可。
方案3:使用jest自动Mock功能
如果业务代码不依赖BLE方法的返回值,直接调用jest自动mock即可,无需手动编写返回逻辑:
jest.mock('react-native-ble-manager');
自动mock会把库的所有方法转为jest.fn(),默认返回undefined,能快速解决测试报错问题。
额外适配提示
如果测试报错是因为找不到原生模块,可在jest.config.js中添加模块映射:
module.exports = { moduleNameMapper: { 'react-native-ble-manager': '<rootDir>/__mocks__/react-native-ble-manager.js', }, };
然后在__mocks__文件夹中创建对应mock文件,内容参考方案1的写法即可。
内容的提问来源于stack exchange,提问作者mizerski
相关产品推荐
相关产品推荐

