test: Phase 0 测试基础设施 — TestApp + MSW + 覆盖率工具 + CI
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

- TestApp struct 封装 TestDb + HealthState + tenant_id/operator_id
- TestFixture 工厂方法: create_patient/create_doctor/create_schedule/create_appointment
- 前端 MSW v2 handlers (auth) + server setup + vitest 集成
- vitest coverage v8 配置 + test:coverage script
- GitHub Actions CI: backend (check + test + clippy) + frontend (tsc + test + build)
This commit is contained in:
iven
2026-04-27 21:12:08 +08:00
parent 41af241238
commit 6997bb1d90
9 changed files with 621 additions and 2 deletions

View File

@@ -0,0 +1,30 @@
import { http, HttpResponse } from 'msw';
const TOKEN_EXPIRES = 3600;
export const authHandlers = [
http.post('/api/v1/auth/login', () =>
HttpResponse.json({
success: true,
data: {
access_token: 'test-access-token',
refresh_token: 'test-refresh-token',
expires_in: TOKEN_EXPIRES,
user: { id: 'test-user-id', username: 'admin', tenant_id: 'test-tenant-id' },
},
}),
),
http.post('/api/v1/auth/refresh', () =>
HttpResponse.json({
success: true,
data: {
access_token: 'test-access-token-refreshed',
refresh_token: 'test-refresh-token-refreshed',
expires_in: TOKEN_EXPIRES,
},
}),
),
];
export const handlers = [...authHandlers];

View File

@@ -0,0 +1,4 @@
import { setupServer } from 'msw/node';
import { handlers } from './handlers';
export const server = setupServer(...handlers);

View File

@@ -1 +1,6 @@
import '@testing-library/jest-dom'
import '@testing-library/jest-dom';
import { server } from './mocks/server';
beforeAll(() => server.listen({ onUnhandledRequest: 'warn' }));
afterEach(() => server.resetHandlers());
afterAll(() => server.close());