Status: done
作为测试开发者, 我想要编写订单管理的完整流程 E2E 测试, 以便验证从创建到关闭的端到端场景。
Given 所有子功能测试已完成 When 编写完整流程测试 Then 包含以下测试场景:
新增订单完整流程
编辑订单完整流程
测试文件: web/tests/e2e/specs/admin/order-complete.spec.ts
web/tests/e2e/specs/admin/order-complete.spec.tsEpic 10: 订单管理 E2E 测试 (Epic C - 业务测试 Epic)
依赖:
从 Story 10.1 学到的经验(Page Object 设计):
orderManagementPage 提供完整的订单管理操作方法createOrder() 创建订单openDetailDialog() 查看订单详情closeDetailDialog() 关闭订单详情对话框从 Story 10.4 学到的经验(创建订单):
createOrder() 方法创建订单从 Story 10.5 学到的经验(编辑订单):
editOrder() 方法编辑订单从 Story 10.7 学到的经验(状态流转):
activateOrder() 激活订单(草稿 → 进行中)closeOrder() 关闭订单(进行中 → 已完成)getOrderStatus() 获取订单状态从 Story 10.9 学到的经验(人员关联):
createDisabledPersonViaAPI()addPersonToOrder() 添加人员到订单getPersonListFromDetail() 获取人员列表从 Story 10.10 学到的经验(附件管理):
openAddAttachmentDialog() 打开附件上传对话框uploadAttachment() 上传附件新增订单完整流程:
编辑订单完整流程:
使用 API 创建测试数据(遵循 Story 10.9 成功模式):
// 1. 创建残疾人数据(使用 API)
const disabledPerson = await createDisabledPersonViaAPI({
name: `测试残疾人_${timestamp}`,
idCard: generateTestIdCard(timestamp),
disabilityType: '肢体残疾',
disabilityLevel: '一级',
// ... 其他字段
});
// 2. 创建测试订单
const orderName = `测试订单_${timestamp}`;
await orderManagementPage.createOrder({
name: orderName,
platformName: '测试平台',
companyName: '测试公司',
channelName: '测试渠道',
expectedStartDate: '2026-01-15',
});
// 3. 添加人员到订单
await orderManagementPage.addPersonToOrder({
personName: disabledPerson.name,
workStatus: '待就业',
expectedEmploymentDate: '2026-01-15',
salary: 5000,
});
// 4. 上传附件
await orderManagementPage.uploadAttachment(
disabledPerson.id,
'sample-id-card.jpg',
'image/jpeg'
);
Fixtures 文件使用:
web/tests/fixtures/images/sample-id-card.jpg - 身份证照片web/tests/fixtures/images/sample-disability-card.jpg - 残疾证照片web/tests/fixtures/images/photo.jpg - 个人照片遵循 Epic 9.6 并行执行决策:
test.describe.serial遵循项目的测试模式:
data-sonner-toast 选择器role="dialog" 或 role="alertdialog"遵循项目的类型规范:
ORDER_STATUS 和 ORDER_STATUS_LABELS 常量WORK_STATUS 和 WORK_STATUS_LABELS 常量OrderStatus 类型别名WorkStatus 类型别名每个测试的独立数据:
test('新增订单完整流程', async ({ adminLoginPage, orderManagementPage }) => {
// 使用时间戳确保唯一性
const timestamp = Date.now();
const testDataCounter = timestamp;
// 创建残疾人数据
const person = await createDisabledPersonViaAPI({
name: `残疾人_${testDataCounter}`,
idCard: generateTestIdCard(testDataCounter),
// ...
});
// 创建订单
const orderName = `订单_${testDataCounter}`;
await orderManagementPage.createOrder({
name: orderName,
// ...
});
// 添加人员
await orderManagementPage.addPersonToOrder({
personName: person.name,
// ...
});
// 验证...
});
完整流程测试需要的 Page Object 方法:
| 方法 | 说明 | 来源 Story |
|---|---|---|
createOrder(data) |
创建订单 | 10.1, 10.4 |
openDetailDialog(orderName) |
打开订单详情 | 10.1, 10.8 |
closeDetailDialog() |
关闭订单详情 | 10.1, 10.8 |
addPersonToOrder(data) |
添加人员到订单 | 10.1, 10.9 |
openAddAttachmentDialog() |
打开附件上传对话框 | 10.1, 10.10 |
uploadAttachment(personId, fileName, mimeType) |
上传附件 | 10.1, 10.10 |
activateOrder() |
激活订单 | 10.1, 10.7 |
closeOrder() |
关闭订单 | 10.1, 10.7 |
getOrderStatus(orderName) |
获取订单状态 | 10.1, 10.7 |
getPersonListFromDetail() |
获取人员列表 | 10.1, 10.8 |
getAttachmentListFromDetail() |
获取附件列表 | 10.1, 10.8 |
editOrder(data) |
编辑订单 | 10.1, 10.5 |
测试文件位置:
web/tests/e2e/
├── pages/admin/
│ └── order-management.page.ts (已有完整方法)
└── specs/admin/
└── order-complete.spec.ts (新建)
与其他测试的关系:
order-create.spec.ts: 创建订单测试(子功能验证)order-edit.spec.ts: 编辑订单测试(子功能验证)order-person.spec.ts: 人员关联测试(子功能验证)order-attachment.spec.ts: 附件管理测试(子功能验证)order-status.spec.ts: 状态流转测试(子功能验证)order-complete.spec.ts: 完整流程测试(端到端集成)本 Story 完成后的影响:
Epic 需求来源:
Page Object 现有实现:
前序 Story 学习:
项目上下文:
Epic 9 并行执行决策:
claude-opus-4-5-20251101
无 - 开发过程顺利,所有测试通过
测试文件创建成功: 创建了 web/tests/e2e/specs/admin/order-complete.spec.ts,包含 2 个完整流程测试
新增订单完整流程测试通过 (测试 1):
编辑订单完整流程测试 (测试 2):
代码审查问题修复完成 (2026-01-13):
getOrderStatus() 方法中 statusValue is not defined 的错误confirmActivate() 方法中 networkidle 超时的问题附件上传功能调试完成:
FileSelector 对话框已打开、上传完成、附件上传流程完成订单状态验证修正:
测试结果 (最终):
Story 完成总结:
新建文件:
/mnt/code/188-179-template-6/web/tests/e2e/specs/admin/order-complete.spec.ts - 订单完整流程测试文件修改文件:
/mnt/code/188-179-template-6/web/tests/e2e/pages/admin/order-management.page.ts - 修复了 getPersonListFromDetail()、closeUploadDialog()、getOrderStatus() 和 confirmActivate() 方法/mnt/code/188-179-template-6/_bmad-output/implementation-artifacts/10-11-order-complete-tests.md - 更新 Story 状态和修复记录