# 登录上下文与个人中心 UI 契约测试报告 ## 1. 测试结论 - 测试日期:2026-08-11 - 测试对象:`http://127.0.0.1:6180/login`、`/profile` - 测试方式:Playwright Chromium;模拟公开登录上下文及已登录个人资料接口,不使用真实账号 - 执行结果:11 项通过,0 项失败,0 项跳过 - TypeScript 检查:通过 - 数据影响:未提交登录请求,未写入数据库,无测试数据残留 本轮验证登录页面、账号菜单和个人中心与 Auth API 的 UI 契约,不替代真实 Auth API、数据库和 Redis 的集成测试。测试复用了执行前已经运行的 6180 前端实例,没有启动或重启任何前后端服务。 ## 2. 契约数据 路由 mock 仅返回以下公开信息: - 默认身份:管理员 `admin` - 四个稳定身份按产品顺序展示:`administrative`、`teacher`、`student`、`admin` - 身份名称、账号字段名称、组织选择模式与组织字段名称 - 启用部门树的 `id/code/name/parentId/children` mock 不包含用户、用户名、人员姓名、密码、令牌或权限数据,避免把匿名登录上下文变成账号枚举接口。 ## 3. 用例结果 | 序号 | 用例 | 结果 | 关键检查 | | --- | --- | --- | --- | | 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 图标;请求体使用旧密码和新密码并在成功后清空 | ## 4. 真实登录辅助函数调整 `tests/helpers.ts` 已按真实角色补充条件组织选择: - 行政:读取 `E2E_LOGIN_DEPARTMENT_NAME`,选择单级教学系。 - 教员:读取 `E2E_LOGIN_PARENT_DEPARTMENT_NAME` 和 `E2E_LOGIN_DEPARTMENT_NAME`,先选教学系,再选本级或直属教研室。 - 管理员、学员:不读取组织配置,也不提交组织选择。 - 若强制改密账号属于行政或教员但缺少相应组织环境变量,用例会给出明确原因并跳过,不会在登录按钮禁用时误判为业务失败。 - 管理员错误身份校验改用无需组织字段的学员身份,避免该用例被组织完整性校验提前阻断。 本轮未提供真实行政/教员账号凭据,因此没有执行这两个身份的真实登录;辅助函数已通过 TypeScript 静态检查。 ## 5. 执行记录 ```text npm run typecheck 结果:通过 npm test -- auth-login-contract.spec.ts platform-account.spec.ts 结果:11 passed(登录 9 项与个人中心 2 项分别复跑均通过) ``` 自动化产物: - HTML 报告:`artifacts/html-report/index.html` - JSON 报告:`artifacts/results.json` - 成功截图目录:`artifacts/screenshots` 本轮生成 10 张成功截图,覆盖四身份字段、行政 SINGLE、教员 CASCADE、身份切换清理、上下文失败降级、375/1024/1440 三档宽度,以及精简页头/账号菜单和个人中心资料/改密。