Web 端 (Playwright): - fixtures: test-data 工厂 + API Client (乐观锁 version) + 增强 auth fixture - pages: LoginPage, PatientListPage, PatientDetailPage, HealthDataPage, AppointmentPage - flows: 患者全流程, 体征数据链路, 预约排班链路, 随访管理链路, 告警处理链路 - smoke tests 迁移到 smoke/ 目录,import 路径更新 - playwright.config.ts 更新: globalSetup 环境检查, 60s timeout, video retain 小程序端 (Vitest + miniprogram-automator): - helpers: AutomatorClient, MpApiClient, MpAuthHelper, MpNavigator - flows: 患者健康数据查看, 体征数据录入, 积分签到兑换, 积分商城浏览 - vitest.config.ts + check-readiness.ts - vitest 4.1.5 依赖安装 Playwright 发现 15 个测试 (5 flow + 10 smoke),全部就绪
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
// apps/miniprogram/e2e/flows/vital-signs-input.spec.ts
|
|
import { describe, it, expect, beforeAll, afterAll, afterEach } from 'vitest';
|
|
import { AutomatorClient } from '../helpers/automator-client';
|
|
import { MpAuthHelper } from '../helpers/auth.helper';
|
|
import { MpApiClient } from '../helpers/api-client';
|
|
import { MpNavigator } from '../helpers/navigation.helper';
|
|
|
|
describe('体征数据录入链路', () => {
|
|
let client: AutomatorClient;
|
|
let auth: MpAuthHelper;
|
|
let nav: MpNavigator;
|
|
let api: MpApiClient;
|
|
const cleanup: Array<() => Promise<void>> = [];
|
|
|
|
beforeAll(async () => {
|
|
api = new MpApiClient();
|
|
await api.login();
|
|
client = new AutomatorClient();
|
|
await client.connect();
|
|
auth = new MpAuthHelper(client, api);
|
|
nav = new MpNavigator(client);
|
|
await auth.loginAsTestPatient();
|
|
}, 30_000);
|
|
|
|
afterEach(async () => {
|
|
for (const fn of cleanup.reverse()) await fn().catch(() => {});
|
|
cleanup.length = 0;
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await client.disconnect();
|
|
});
|
|
|
|
it('填写并提交血压心率数据', async () => {
|
|
await nav.goToVitalSignsInput();
|
|
|
|
await client.inputText('input[placeholder*="收缩压"], #systolic', '118');
|
|
await client.inputText('input[placeholder*="舒张压"], #diastolic', '76');
|
|
await client.inputText('input[placeholder*="心率"], #heartRate', '68');
|
|
|
|
await client.tap('button[type="submit"], .submit-btn');
|
|
|
|
const el = await client.waitForElement('.success, .ant-message-success, [class*="toast"]', 5000).catch(() => null);
|
|
const pageData = await client.getPageData();
|
|
expect(pageData).toBeDefined();
|
|
});
|
|
});
|