import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; // 使用 vi.hoisted 确保 storage 在 mock 提升前可用 const { storage } = vi.hoisted(() => ({ storage: new Map(), })); vi.mock('@tarojs/taro', () => ({ default: { openBluetoothAdapter: vi.fn().mockResolvedValue({}), closeBluetoothAdapter: vi.fn().mockResolvedValue({}), startBluetoothDevicesDiscovery: vi.fn().mockResolvedValue({}), stopBluetoothDevicesDiscovery: vi.fn().mockResolvedValue({}), onBluetoothDeviceFound: vi.fn(), offBluetoothDeviceFound: vi.fn(), createBLEConnection: vi.fn().mockResolvedValue({}), closeBLEConnection: vi.fn().mockResolvedValue({}), getBLEDeviceServices: vi.fn().mockResolvedValue({ services: [] }), getBLEDeviceCharacteristics: vi.fn().mockResolvedValue({ characteristics: [] }), notifyBLECharacteristicValueChange: vi.fn().mockResolvedValue({}), onBLECharacteristicValueChange: vi.fn(), onBLEConnectionStateChange: vi.fn(), getStorageSync: vi.fn((key: string) => storage.get(key) || ''), setStorageSync: vi.fn((key: string, value: string) => { storage.set(key, value); }), removeStorageSync: vi.fn((key: string) => { storage.delete(key); }), }, })); import { BLEManager } from '@/services/ble/BLEManager'; import { XiaomiBandAdapter } from '@/services/ble/adapters/XiaomiBandAdapter'; describe('BLEManager DataBuffer 集成', () => { let manager: BLEManager; beforeEach(() => { storage.clear(); manager = new BLEManager(); manager.registerAdapter(XiaomiBandAdapter); }); afterEach(async () => { await manager.destroy(); }); it('registerAdapter 添加适配器', () => { const count = (manager as any).adapters.length; expect(count).toBeGreaterThanOrEqual(1); }); it('getCachedReadings 返回空数组(未连接时)', () => { const readings = manager.getCachedReadings(); expect(readings).toEqual([]); }); it('flushPendingReadings 无缓存时返回 0', async () => { const uploadFn = vi.fn().mockResolvedValue(0); const count = await manager.flushPendingReadings(uploadFn); expect(count).toBe(0); expect(uploadFn).not.toHaveBeenCalled(); }); it('DataBuffer 实例已初始化', () => { const buffer = (manager as any).dataBuffer; expect(buffer).toBeDefined(); expect(typeof buffer.push).toBe('function'); expect(typeof buffer.flush).toBe('function'); expect(typeof buffer.restore).toBe('function'); }); });