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

92 lines
4.1 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 { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
// 注:实际项目可能使用 Cypress/Playwright此处以标准 E2E 断言结构演示,可根据实际测试框架替换底层 API
import ExamApply from '@/views/outpatient/exam/ExamApply.vue'
describe('门诊检查申请单交互回归测试', () => {
// ... 原有测试用例 ...
describe('Bug #550 Regression', { tags: ['@bug550', '@regression'] }, () => {
it('应解耦项目与方法勾选、修复卡片显示并实现结构化层级展示', async () => {
const wrapper = mount(ExamApply, {
global: {
stubs: { 'el-tree': true, 'el-checkbox-group': true, 'el-checkbox': true, 'el-tooltip': true, 'el-icon': true }
}
})
// 1. 模拟勾选彩超项目 "128线排"
await wrapper.find('.item-checkbox[data-id="item_128"]').trigger('click')
// 验证:检查方法未被自动勾选(解耦)
const methodCheckbox = wrapper.find('.method-checkbox[data-id="method_default"]')
expect(methodCheckbox.attributes('checked')).toBeUndefined()
// 2. 验证已选卡片显示
const selectedCard = wrapper.find('.selected-card')
expect(selectedCard.text()).not.toContain('套餐') // 去除冗余前缀
expect(selectedCard.attributes('title')).toContain('128线排') // 完整名称提示
// 3. 验证默认收起状态
const detailsPanel = wrapper.find('.selected-details')
expect(detailsPanel.isVisible()).toBe(false)
// 4. 验证层级结构:项目 > 检查方法
const hierarchy = wrapper.find('.selected-list')
expect(hierarchy.find('.group-header').exists()).toBe(true)
expect(hierarchy.find('.method-item').exists()).toBe(true)
// 点击展开验证
await wrapper.find('.group-header').trigger('click')
expect(detailsPanel.isVisible()).toBe(true)
})
})
})
describe('Bug #506 Regression', { tags: ['@bug506', '@regression'] }, () => {
it('门诊诊前退号后,多表状态值应与 PRD 定义严格一致', async () => {
// 模拟前端发起退号请求
const orderId = 10086
const slotId = 2001
const poolId = 3001
// 1. 调用退号接口
const cancelRes = await mockApi.post('/api/outpatient/registration/cancel', { orderId })
expect(cancelRes.status).toBe(200)
// 2. 验证 order_main 表状态
const orderMain = await mockApi.get(`/api/order/main/${orderId}`)
expect(orderMain.data.status).toBe(0) // 已取消
expect(orderMain.data.pay_status).toBe(3) // 已退费
expect(orderMain.data.cancel_reason).toBe('诊前退号') // 原因字段修正
})
})
describe('Bug #503 Regression', { tags: ['@bug503', '@regression'] }, () => {
it('发药明细与发药汇总单数据触发时机应保持一致', async () => {
// 模拟系统参数:需申请模式 (mode=1)
const configMode = 1;
const orderId = 'ORD_503_001';
// 1. 护士执行医嘱
const execRes = await mockApi.post('/api/inpatient/order/execute', { orderId });
expect(execRes.status).toBe(200);
// 2. 验证需申请模式下,执行后药房明细单和汇总单均不应显示(状态同步拦截)
const detailRes = await mockApi.get('/api/pharmacy/dispensing/detail', { orderId });
const summaryRes = await mockApi.get('/api/pharmacy/dispensing/summary', { orderId });
expect(detailRes.data.length).toBe(0);
expect(summaryRes.data.length).toBe(0);
// 3. 护士执行汇总发药申请
const applyRes = await mockApi.post('/api/inpatient/dispensing/apply-summary', { orderIds: [orderId] });
expect(applyRes.status).toBe(200);
// 4. 验证申请后,明细单与汇总单同步出现且状态一致
const detailAfter = await mockApi.get('/api/pharmacy/dispensing/detail', { orderId });
const summaryAfter = await mockApi.get('/api/pharmacy/dispensing/summary', { orderId });
expect(detailAfter.data.length).toBeGreaterThan(0);
expect(summaryAfter.data.length).toBeGreaterThan(0);
expect(detailAfter.data[0].status).toBe(summaryAfter.data[0].status); // 状态同步
});
});