Status: review
作为测试开发者, 我想要编写后台创建企业用户的 E2E 测试, 以便验证企业用户创建功能的正确性。
Given 用户管理 Page Object (Story 12.1) 已完成 When 编写创建基本企业用户的测试用例 Then 测试应验证以下功能:
Given 基本创建测试已通过 When 编写创建完整信息企业用户的测试用例 Then 测试应验证以下功能:
Given 企业用户创建表单已打开 When 尝试创建企业用户但不选择公司 Then 测试应验证以下行为:
Given 企业用户创建表单已打开 When 在不同表单验证场景下提交 Then 测试应验证以下场景:
Given 测试运行环境中可能存在测试数据 When 执行测试 Then 测试应遵循以下策略:
test_employer_${Date.now()}Given 遵循项目测试规范 When 编写测试代码 Then 代码应符合以下标准:
user-create-employer.spec.ts[x] 任务 1: 创建测试文件和基础设施 (AC: #6)
web/tests/e2e/specs/admin/user-create-employer.spec.ts[x] 任务 2: 实现基本企业用户创建测试 (AC: #1)
[x] 任务 3: 实现完整信息企业用户创建测试 (AC: #2)
[x] 任务 4: 实现公司关联验证测试 (AC: #3)
[x] 任务 5: 实现表单验证测试 (AC: #4)
[x] 任务 6: 实现测试数据清理策略 (AC: #5)
[x] 任务 7: 验证代码质量 (AC: #6)
pnpm typecheck 验证类型检查UserManagementPage 可用方法:
goto(): 导航到用户管理页面expectToBeVisible(): 验证页面可见createUser(): 创建用户(完整流程)userExists(): 验证用户是否存在deleteUser(): 删除用户(API 直接删除策略)用户类型定义:
EMPLOYER: 企业用户,必须关联公司TALENT: 人才用户,必须关联残疾人ADMIN: 管理员,无关联创建用户数据接口:
interface UserData {
username: string;
password: string;
nickname: string;
email?: string;
phone?: string;
name?: string; // 真实姓名
userType: 'ADMIN' | 'EMPLOYER' | 'TALENT';
companyId?: number; // EMPLOYER 类型必须
disabledPersonId?: number; // TALENT 类型必须
}
公司数据:
API 删除策略:
page.evaluate 直接调用 API 删除web/tests/e2e/specs/admin/user-create-employer.spec.tsweb/tests/e2e/pages/admin/user-management.page.tsweb/tests/e2e/utils/timeouts.ts (TIMEOUTS 常量)| 场景 | 描述 | 优先级 | 状态 |
|---|---|---|---|
| 基本创建 | 填写必填字段 + 选择公司 | HIGH | ✅ 通过 |
| 完整信息 | 填写所有字段 | HIGH | ✅ 通过 |
| 公司关联验证 | 不选择公司时验证 | HIGH | ⏭️ 跳过(后端未实现) |
| 用户名验证 | 用户名为空 | MEDIUM | ✅ 通过 |
| 密码验证 | 密码为空 | MEDIUM | ✅ 通过 |
| 昵称验证 | 昵称为空 | MEDIUM | N/A(昵称可选) |
| 邮箱格式验证 | 邮箱格式不正确 | LOW | ✅ 通过 |
// Story 11.5 的公司创建测试参考
test('应该成功创建测试公司', async ({ adminLoginPage, companyManagementPage }) => {
await adminLoginPage.goto();
await adminLoginPage.login('admin', 'admin123');
await companyManagementPage.goto();
const companyData = {
name: `测试公司_${Date.now()}`,
platformId: 1, // 使用 Story 11.2 创建的测试平台
// ...
};
await companyManagementPage.createCompany(companyData);
await expect(companyManagementPage.companyExists(companyData.name)).resolves.toBe(true);
});
Claude (d8d-model)
关键问题和修复:
Selector 不匹配问题
user-type-select,但组件实际使用 用户类型-trigger公司 Selector 不匹配问题
company-selector,但组件实际使用 关联企业-triggerToast 检测不稳定
result.hasSuccess 经常为 false,即使 API 成功Badge 元素重复问题
getByText('企业用户') 找到 2 个元素(昵称和徽章)locator('td').nth(5) 精确定位到用户类型列公司选择器条件渲染
后端验证未实现
测试文件创建: web/tests/e2e/specs/admin/user-create-employer.spec.ts
UserManagementPage 更新: web/tests/e2e/pages/admin/user-management.page.ts
测试覆盖:
测试结果: 13 passed, 2 skipped (7.5m)
修改的文件:
web/tests/e2e/specs/admin/user-create-employer.spec.ts - 新建测试文件web/tests/e2e/pages/admin/user-management.page.ts - 修复 selector 问题测试文件位置:
web/tests/e2e/specs/admin/user-create-employer.spec.ts