import { vi } from 'vitest'; /** * Taro API mock — 所有小程序测试共享的基础 mock。 * storage 使用内存 Map,可在 beforeEach 中 clear。 */ export function createTaroMock() { const storage = new Map(); return { storage, mock: { default: { getStorageSync: vi.fn((key: string) => storage.get(key) ?? ''), setStorageSync: vi.fn((key: string, val: any) => storage.set(key, val)), removeStorageSync: vi.fn((key: string) => storage.delete(key)), showToast: vi.fn(), hideToast: vi.fn(), showLoading: vi.fn(), hideLoading: vi.fn(), request: vi.fn(), reLaunch: vi.fn(), navigateTo: vi.fn(), redirectTo: vi.fn(), switchTab: vi.fn(), getCurrentPages: vi.fn(() => []), getAccountInfoSync: vi.fn(() => ({ miniProgram: { envVersion: 'develop' } })), getSystemInfoSync: vi.fn(() => ({ windowHeight: 800, windowWidth: 375, pixelRatio: 2, })), }, }, }; } /** 一键 mock @tarojs/taro — 在 vi.mock 回调中使用 */ export function mockTaro() { const { storage, mock } = createTaroMock(); vi.mock('@tarojs/taro', () => mock); vi.mock('@/utils/secure-storage', () => ({ secureGet: vi.fn((key: string) => storage.get(key) ?? ''), secureSet: vi.fn((key: string, val: string) => storage.set(key, val)), secureRemove: vi.fn((key: string) => storage.delete(key)), })); return { storage }; }