Files
his/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts
2026-05-27 01:25:51 +08:00

103 lines
4.3 KiB
TypeScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { test, expect } from '@playwright/test';
// 假设文件原有内容...
test.describe('HIS 系统回归测试集', () => {
test('基础登录流程', async ({ page }) => {
await page.goto('/login');
await expect(page).toHaveTitle(/HIS/);
});
// ================= 新增 Bug #505 回归测试 =================
test('@bug505 @regression 护士端已发药医嘱禁止退回', async ({ page }) => {
// 1. 登录护士账号
await page.goto('/login');
await page.fill('input[name="username"]', 'wx');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
// 2. 进入医嘱校对模块 -> 已校对页签
await page.click('text=医嘱校对');
await page.click('text=已校对');
await page.waitForLoadState('networkidle');
// 3. 验证已发药医嘱的退回按钮置灰逻辑
// 模拟勾选一条 dispensingStatus 为 DISPENSED 的数据
const dispensedRow = page.locator('tr:has-text("已发药")').first();
await dispensedRow.locator('input[type="checkbox"]').check();
const returnBtn = page.locator('button:has-text("退回")');
const isDisabled = await returnBtn.isDisabled();
// 预期:按钮应置灰不可点击
expect(isDisabled).toBe(true);
// 4. 若前端未置灰,验证点击拦截与提示文案
if (!isDisabled) {
await returnBtn.click();
await expect(page.locator('.el-message--error')).toContainText(
'该药品已由药房发放,请先执行退药处理,不可直接退回'
);
}
});
// ================= 新增 Bug #503 回归测试 =================
test('@bug503 @regression 住院发退药明细与汇总单触发时机同步校验', async ({ page }) => {
// 前置:确保字典配置为“需申请模式”(默认)
// 1. 护士登录并执行医嘱
await page.goto('/login');
await page.fill('input[name="username"]', 'wx');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
await page.click('text=医嘱执行');
await page.waitForLoadState('networkidle');
// 勾选第一条待执行医嘱并执行
const firstOrderRow = page.locator('.el-table__body-wrapper tbody tr').first();
await firstOrderRow.locator('input[type="checkbox"]').check();
await page.click('button:has-text("执行")');
});
// ================= 新增 Bug #561 回归测试 =================
test('@bug561 @regression 门诊医生站医嘱总量单位显示正常', async ({ page }) => {
// 1. 登录医生账号
await page.goto('/login');
await page.fill('input[name="username"]', 'doctor1');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
// 2. 拦截医嘱列表接口,验证返回数据中 total_quantity_unit 字段不为 null
await page.route('**/api/outpatient/order/detail*', async route => {
const response = await route.fetch();
const json = await response.json();
// 模拟或校验实际返回结构,确保 unit 字段存在且非 null
if (json.data && json.data.total_quantity_unit) {
expect(json.data.total_quantity_unit).not.toBe('null');
expect(json.data.total_quantity_unit).not.toBeNull();
}
await route.fulfill({ response, json });
});
// 3. 进入门诊医生工作站,选择患者并开立手术申请
await page.click('text=门诊医生工作站');
await page.waitForLoadState('networkidle');
await page.click('text=手术申请');
await page.waitForLoadState('networkidle');
// 4. 切换到医嘱标签页并验证 UI 显示
await page.click('text=医嘱');
await page.waitForLoadState('networkidle');
// 验证表格中总量列不包含 "null" 字符串
const orderTable = page.locator('.el-table__body-wrapper tbody tr').first();
const totalQuantityCell = orderTable.locator('td:has-text("总量")').first();
const cellText = await totalQuantityCell.textContent();
expect(cellText).not.toContain('null');
// 验证格式符合预期1 次)
expect(cellText).toMatch(/\d+\s*\S+/);
});
});