http://127.0.0.1:6180/login、/profile本轮验证登录页面、账号菜单和个人中心与 Auth API 的 UI 契约,不替代真实 Auth API、数据库和 Redis 的集成测试。测试复用了执行前已经运行的 6180 前端实例,没有启动或重启任何前后端服务。
路由 mock 仅返回以下公开信息:
adminadministrative、teacher、student、adminid/code/name/parentId/childrenmock 不包含用户、用户名、人员姓名、密码、令牌或权限数据,避免把匿名登录上下文变成账号枚举接口。
| 序号 | 用例 | 结果 | 关键检查 |
|---|---|---|---|
| 1 | 默认管理员且四个身份展示各自约定字段 | 通过 | 展示顺序为行政、教员、学员、管理员,但默认仍选中 admin;各身份账号字段与组织字段正确 |
| 2 | 行政身份按 SINGLE 模式只选择一个教学系 | 通过 | 只出现 login-department;只列顶层教学系;选择前禁止提交,选择后允许提交 |
| 3 | 教员身份按 CASCADE 模式支持教学系本级和直属教研室 | 通过 | 出现 login-organization 和 login-department;下级先禁用;选择上级后同时显示“本级”和直属子级 |
| 4 | 切换身份会清空账号密码和已选组织 | 通过 | 账号、密码、单级/级联组织路径均被清空,避免跨身份携带敏感输入 |
| 5 | 登录页不枚举账号且不会预填密码 | 通过 | 账号为自由输入框,无 datalist/账号下拉;四种身份初始值均为空;eye 图标可切换密码显隐 |
| 6 | 登录上下文失败时管理员账号密码入口仍可使用 | 通过 | 显示连接失败状态;管理员仍为默认身份;无组织依赖;填写账号密码后按钮可用 |
| 7 | 375px 响应式检查 | 通过 | document、body 和登录卡片均未产生横向溢出 |
| 8 | 1024px 响应式检查 | 通过 | document、body 和登录卡片均未产生横向溢出 |
| 9 | 1440px 响应式检查 | 通过 | document、body 和登录卡片均未产生横向溢出 |
| 10 | 精简页头和账号菜单 | 通过 | 页头不高于 62px,不再展示英文副标题;账号菜单仅有“个人中心、退出登录” |
| 11 | 个人资料与修改密码 | 通过 | 展示姓名、账号、部门、授权模式和当前角色;三个密码框有 eye 图标;请求体使用旧密码和新密码并在成功后清空 |
tests/helpers.ts 已按真实角色补充条件组织选择:
E2E_LOGIN_DEPARTMENT_NAME,选择单级教学系。E2E_LOGIN_PARENT_DEPARTMENT_NAME 和 E2E_LOGIN_DEPARTMENT_NAME,先选教学系,再选本级或直属教研室。本轮未提供真实行政/教员账号凭据,因此没有执行这两个身份的真实登录;辅助函数已通过 TypeScript 静态检查。
npm run typecheck
结果:通过
npm test -- auth-login-contract.spec.ts platform-account.spec.ts
结果:11 passed(登录 9 项与个人中心 2 项分别复跑均通过)
自动化产物:
artifacts/html-report/index.htmlartifacts/results.jsonartifacts/screenshots本轮生成 10 张成功截图,覆盖四身份字段、行政 SINGLE、教员 CASCADE、身份切换清理、上下文失败降级、375/1024/1440 三档宽度,以及精简页头/账号菜单和个人中心资料/改密。