Status: backlog
作为测试开发者, 我想要验证后台更新人员状态后双小程序的数据同步, 以便确保跨端数据同步的正确性和时效性。
Given 后台订单管理功能已完成(Epic 10) When 测试者在管理后台更新人员的工作状态 Then 测试应验证以下功能:
Given 后台订单管理功能已完成(Epic 10) When 测试者在管理后台更新人员的工作状态 Then 测试应验证以下功能:
Given 人员工作状态有多种可能值 When 测试者在后台更新不同状态 Then 测试应验证以下状态流转:
Given 人员状态包含多个字段 When 测试者在后台更新状态 Then 测试应验证以下字段:
Given 跨端测试涉及多个系统 When 执行测试 Then 测试应遵循以下策略:
Given 遵循项目测试规范 When 编写测试代码 Then 代码应符合以下标准:
status-update-sync.spec.tspnpm typecheck 类型检查[ ] 任务 1: 创建跨端测试文件和基础设施 (AC: #6)
web/tests/e2e/specs/cross-platform/status-update-sync.spec.ts[ ] 任务 2: 实现后台更新状态测试 (AC: #1, #3, #4)
[ ] 任务 3: 实现企业小程序验证测试 (AC: #1, #2, #4)
[ ] 任务 4: 实现人才小程序验证测试 (AC: #2, #4)
[ ] 任务 5: 实现测试数据清理策略 (AC: #5)
[ ] 任务 6: 实现数据同步时效性验证 (AC: #1, #2)
pnpm typecheck 验证类型检查Epic 13: 跨端数据同步测试 (Epic E)
Epic 13 Story 依赖关系:
Story 13.1: 后台创建订单 → 企业小程序验证 ✅
Story 13.2: 后台编辑订单 → 企业小程序验证
Story 13.3: 后台添加人员 → 人才小程序验证
Story 13.4: 后台更新状态 → 双小程序验证 ← 当前 Story
Story 13.5: 跨端测试稳定性验证
Story 13.6: 首页看板数据联动专项测试 ✅
Story 13.7: 首页导航和交互测试
从已完成的 Epic 10 中学习到的订单管理模式:
OrderManagementPage 可用方法:
// 订单人员管理
async openPersonManagementDialog(orderName: string): Promise<void>
async updatePersonWorkStatus(personId: string, workStatus: string): Promise<FormSubmitResult>
async setPersonHireDate(personId: string, hireDate: string): Promise<FormSubmitResult>
async setPersonResignDate(personId: string, resignDate: string): Promise<FormSubmitResult>
// 获取人员状态
async getPersonStatus(personId: string): Promise<PersonStatus>
工作状态枚举:
enum WorkStatus {
UNEMPLOYED = '未就业', // 未就业
PENDING = '待就业', // 待就业
EMPLOYED = '已就业', // 已就业
RESIGNED = '已离职', // 已离职
}
人员状态数据结构:
interface PersonStatus {
personId: string;
personName: string;
workStatus: WorkStatus;
hireDate?: string;
resignDate?: string;
orderId: string;
orderName: string;
}
从已完成的 Epic 12 中学习到的小程序模式:
EnterpriseMiniPage 可用方法:
// 订单详情
async openOrderDetail(orderName: string): Promise<void>
async getOrderPersonList(): Promise<PersonStatus[]>
async getPersonStatus(personId: string): Promise<PersonStatus>
TalentMiniPage 可用方法:
// 订单详情
async openOrderDetail(orderName: string): Promise<void>
async getOrderPersonList(): Promise<PersonStatus[]>
async getPersonStatus(personId: string): Promise<PersonStatus>
后台人员管理对话框选择器(待验证):
| 功能 | data-testid |
|------|-------------|
| 人员管理按钮 | person-management-button |
| 工作状态下拉框 | work-status-selector |
| 入职日期输入框 | hire-date-input |
| 离职日期输入框 | resign-date-input |
| 保存按钮 | save-person-button |
小程序订单详情选择器(待验证):
| 功能 | data-testid |
|------|-------------|
| 订单详情容器 | mini-order-detail |
| 人员列表容器 | mini-person-list |
| 人员状态标签 | mini-person-status-{personId} |
| 入职日期标签 | mini-hire-date-{personId} |
| 离职日期标签 | mini-resign-date-{personId} |
轮询等待模式:
async waitForStatusUpdate(
personId: string,
expectedStatus: string,
timeout: number = 10000
): Promise<boolean> {
const startTime = Date.now();
while (Date.now() - startTime < timeout) {
const status = await this.getPersonStatus(personId);
if (status.workStatus === expectedStatus) {
return true;
}
await this.page.waitForTimeout(500); // 每 500ms 检查一次
}
return false;
}
前置条件:
测试数据唯一性:
const timestamp = Date.now();
const personData = {
name: `状态同步测试人员_${timestamp}`,
idCard: generateUniqueIdCard(timestamp),
};
清理方法:
test.afterEach(async ({ orderManagementPage, originalStatus }) => {
// 在后台恢复人员到原始状态
await orderManagementPage.updatePersonWorkStatus(
personId,
originalStatus.workStatus
);
});
架构文档:
_bmad-output/planning-artifacts/epics.md#Epic 13_bmad-output/project-context.mddocs/standards/e2e-radix-testing.md相关 Story 文档:
10-9-order-person-tests.md (人员关联功能测试)12-4-enterprise-mini-page-object.md (企业小程序 Page Object)12-6-talent-mini-page-object.md (人才小程序 Page Object)13-1-order-create-sync.md (订单列表同步测试)13-3-person-add-sync.md (后台添加人员测试)Created by create-story workflow
Story 13.4 created - not yet started
Story 13.4 创建完成,状态:backlog
Created files:
/mnt/code/188-179-template-6/_bmad-output/implementation-artifacts/13-4-status-update-sync.md