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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:04:55