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:
2
apps/miniprogram/__tests__/helpers/index.ts
Normal file
2
apps/miniprogram/__tests__/helpers/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export { mockTaro, createTaroMock } from './mock-taro';
|
||||
export { mockApi, apiOk } from './mock-api';
|
||||
19
apps/miniprogram/__tests__/helpers/mock-api.ts
Normal file
19
apps/miniprogram/__tests__/helpers/mock-api.ts
Normal 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);
|
||||
}
|
||||
50
apps/miniprogram/__tests__/helpers/mock-taro.ts
Normal file
50
apps/miniprogram/__tests__/helpers/mock-taro.ts
Normal 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 };
|
||||
}
|
||||
Reference in New Issue
Block a user