Status: done
作为测试开发者, 我想要验证跨端测试基础设施的稳定性和可靠性, 以便确保测试框架在各种条件下都能正确运行并返回一致结果。
定位说明: 本 Story 聚焦测试基础设施验证,不包含业务流程测试。业务流程测试由 Story 13.1-13.4 覆盖。
Given 跨端测试使用多个 Page Objects When 测试执行时调用 Page Object 方法 Then 测试应验证以下基础设施:
Given 多个测试可能同时运行 When 执行并发跨端测试 Then 测试应验证以下基础设施:
Given 测试框架可能遇到各种边界情况 When 执行跨端测试 Then 测试应验证以下基础设施:
Given 测试基础设施需要在各种情况下保持稳定 When 连续运行测试 10 次 Then 测试应满足以下标准:
Given 测试过程中可能出现错误 When 发生错误或失败 Then 测试应验证以下基础设施:
Given 遵循项目测试规范 When 编写测试代码 Then 代码应符合以下标准:
cross-platform-stability.spec.tspnpm typecheck 类型检查[x] 任务 2: 重写测试文件 - 移除业务流程测试
[x] 任务 3: 实现新的基础设施测试
[x] 任务 4: 运行测试验证
pnpm typecheck 验证类型检查(web 包通过)[x] 任务 5: 提交代码
Epic 13: 跨端数据同步测试 (Epic E)
Epic 13 Story 依赖关系:
Story 13.1: 后台创建订单 → 企业小程序验证 ✅
Story 13.2: 后台编辑订单 → 企业小程序验证
Story 13.3: 后台添加人员 → 人才小程序验证
Story 13.4: 后台更新状态 → 双小程序验证
Story 13.5: 跨端测试基础设施验证 ← 当前 Story
Story 13.6: 首页看板数据联动专项测试 ✅
Story 13.7: 首页导航和交互测试
本 Story 与 13.1-13.4 的区别:
| Story | 聚焦点 | 测试内容 |
|---|---|---|
| 13.1-13.4 | 业务流程测试 | 创建订单、编辑订单、添加人员、更新状态等业务功能 |
| 13.5 | 测试基础设施验证 | Page Object 稳定性、Browser Context 隔离、选择器匹配、等待机制 |
本 Story 不包含:
本 Story 包含:
Page Object 稳定性验证:
test.describe('AC1: Page Object 稳定性验证', () => {
test('应该能成功实例化和调用所有 Page Object 方法', async ({ adminPage }) => {
// 验证 Page Object 可以正确实例化
const adminLoginPage = new AdminLoginPage(adminPage);
const orderManagementPage = new OrderManagementPage(adminPage);
// 验证 Page Object 方法可调用
expect(typeof adminLoginPage.goto).toBe('function');
expect(typeof adminLoginPage.login).toBe('function');
expect(typeof orderManagementPage.goto).toBe('function');
});
});
Browser Context 隔离验证:
test.describe.parallel('AC2: 并发操作安全性验证', () => {
test('Browser Context 应该独立隔离', async ({ page: page1, browser }) => {
// 创建两个独立的 context
const context1 = page1.context();
const context2 = await browser.newContext();
// 验证两个 context 是独立的
expect(context1).not.toBe(context2);
// 清理
await context2.close();
});
});
data-testid 选择器验证:
test('应该使用 data-testid 选择器定位关键元素', async ({ adminPage }) => {
const orderManagementPage = new OrderManagementPage(adminPage);
await orderManagementPage.goto();
// 验证关键元素使用 data-testid 选择器
const createButton = adminPage.getByTestId('create-order-button');
const count = await createButton.count();
expect(count).toBeGreaterThan(0);
});
等待机制验证:
test('页面元素等待机制应该正确工作', async ({ adminPage }) => {
const orderManagementPage = new OrderManagementPage(adminPage);
const startTime = Date.now();
await orderManagementPage.goto();
const endTime = Date.now();
// 验证页面在合理时间内加载完成
expect(endTime - startTime).toBeLessThan(TIMEOUTS.PAGE_LOAD);
});
确保测试之间不相互干扰:
// 使用独立的 Browser Context
test.beforeEach(async ({ browser }) => {
// 每个测试使用独立的 context
const context = await browser.newContext();
const page = await context.newPage();
// 测试代码...
});
test.afterEach(async ({ context }) => {
// 清理 Browser Context
await context.close();
});
测试失败后的清理:
test.afterEach(async ({ context }) => {
try {
// 清理 Browser Context
await context.close();
} catch (error) {
// 清理失败,记录但不影响其他测试
console.error('清理 Browser Context 失败:', error);
}
});
架构文档:
_bmad-output/planning-artifacts/epics.md#Epic 13_bmad-output/project-context.mddocs/standards/e2e-radix-testing.md相关 Story 文档:
10-14-order-stability-test.md (订单管理稳定性验证 - 测试基础设施参考)13-1-order-create-sync.md (订单列表同步测试 - 业务流程)13-2-order-edit-sync.md (订单编辑同步测试 - 业务流程)13-3-person-add-sync.md (人员添加同步测试 - 业务流程)13-4-status-update-sync.md (状态更新同步测试 - 业务流程)Claude Opus 4.5 (model ID: claude-opus-4-5-20251101)
No debug logs needed - refactoring straightforward
Story 13.5 重构完成,状态:done
代码审查修复记录(2026-01-15):
重构摘要:
重构摘要:
重构内容:
测试结果:
文件修改:
cross-platform-stability.spec.ts: 从 486 行减少到 361 行(减少约 25%)Modified files:
_bmad-output/implementation-artifacts/13-5-cross-platform-stability.md (重构)web/tests/e2e/specs/cross-platform/cross-platform-stability.spec.ts (重写)2026-01-14: Story 13.5 创建完成
2026-01-15: Story 13.5 重构完成
2026-01-15: Story 13.5 代码审查修复完成