feat(miniprogram): service 层测试框架搭建

- 新增 __tests__/helpers/: mock-taro (Taro API mock) + mock-api (request mock)
- 示例测试: patient.test.ts (3 用例) + appointment.test.ts (9 用例)
- 覆盖 list/create/update/cancel/calendar 等核心场景
- 全部 42 测试通过(含 4 个已有 BLE 测试)
This commit is contained in:
iven
2026-05-11 13:58:58 +08:00
parent 0a8ff4bbe7
commit af3eb0c7a1
5 changed files with 276 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
export { mockTaro, createTaroMock } from './mock-taro';
export { mockApi, apiOk } from './mock-api';

View File

@@ -0,0 +1,19 @@
import { vi } from 'vitest';
// 顶层 mock — vitest 自动提升,无警告
vi.mock('@/services/request', () => ({
api: {
get: vi.fn(),
post: vi.fn(),
put: vi.fn(),
delete: vi.fn(),
},
clearRequestCache: vi.fn(),
markLoggingOut: vi.fn(),
clearLoggingOut: vi.fn(),
}));
/** 创建一个成功的 API 响应 */
export function apiOk<T>(data: T) {
return Promise.resolve(data);
}

View File

@@ -0,0 +1,50 @@
import { vi } from 'vitest';
/**
* Taro API mock — 所有小程序测试共享的基础 mock。
* storage 使用内存 Map可在 beforeEach 中 clear。
*/
export function createTaroMock() {
const storage = new Map<string, any>();
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 };
}