接口错误 Message 回归报告

资料 → 原型 → 设计 → 开发 → 测试

主回归:代表性接口错误按统一 Message 展示;自动消失、重试与业务状态保留已通过浏览器验证。

认证附加:3 项通过,2 项旧改密入口受当前路由契约阻断;原始失败保留,未计为通过。

主回归 9 / 9 通过主回归 17 张截图58 次模拟 API 请求0 个未捕获页面异常

审查与实施

资料

按本轮“接口错误使用 Message,不保留常驻错误横条”的要求检查。沿用已确认的教学业务边界:离线识别回放、观察模式、步骤反馈和表单校验仍需可见。

原型

错误发生时顶部短暂提示;可以手动关闭,约 4.5 秒自动消失。同一错误合并展示;失败后仍可重新加载,已成功取得的数据不因后续刷新失败消失。

设计

共享 Message 处理负责统一展示与缓存页面生命周期;请求层保留业务错误码、HTTP 状态和 requestId,静默请求不会自行弹窗。未取得数据与空结果保持区分。

开发

代表性覆盖内容制作、系统用户与教学实施,包括训练编辑器加载失败的重试入口。接口异常详情仅在 Message 中展示;表单必填错误、项目编码说明和离线运行模式继续保留。

测试

使用真实 Vue / Element Plus 页面、Edge 无头浏览器和浏览器级 API mock。覆盖本机与局域网入口。身份及接口数据均为合成测试数据;不登录真实账号、不写业务库,不将本轮测试称为真实服务端或设备联调。

浏览器验证(主回归)

PASS

1. 内容列表:错误自动消失、重试恢复、再次失败保留旧数据

12.8 秒
01-content-error-message
01-content-error-message
02-content-old-data-retained
02-content-old-data-retained
PASS

2. 系统用户:并行同错合并一条,重复搜索可再次提示

12.7 秒
03-users-grouped-message
03-users-grouped-message
04-users-retry-without-banner
04-users-retry-without-banner
PASS

3. 训练编辑器:加载失败提示消失后保留重新加载按钮

6.4 秒
05-legacy-training-message
05-legacy-training-message
06-legacy-training-retry
06-legacy-training-retry
PASS

4. 实装预览:任务上下文错误用 Message,离线与教员模式持续可见

6.5 秒
07-physical-context-message
07-physical-context-message
08-physical-mode-preserved
08-physical-mode-preserved
PASS

5. 新建训练:业务说明与必填校验保留,不发起创建请求

2.5 秒
09-create-validation-preserved
09-create-validation-preserved
PASS

6. 缓存列表:失活时晚到错误不弹出,返回不重放旧错误

1.9 秒
10-inactive-page-no-message
10-inactive-page-no-message
11-reactivated-no-stale-message
11-reactivated-no-stale-message
PASS

7. HTTP 合同:真实 Axios 超时中文化,403/409 元数据保留,静默请求不自动弹窗

1.9 秒
12-http-silent-errors
12-http-silent-errors
15-business-message-keeps-original-text
15-business-message-keeps-original-text
PASS

8. 局域网教学列表:既有 ElMessage.error 使用全局关闭和自动消失配置

6.9 秒
13-lan-teaching-message
13-lan-teaching-message
14-lan-teaching-after-dismiss
14-lan-teaching-after-dismiss
PASS

9. 模型桥接 DOM 合同:初次错误与晚写详情转为重试说明,ready 恢复交互

0.8 秒
16-model-bridge-neutral-retry
16-model-bridge-neutral-retry
17-model-bridge-ready
17-model-bridge-ready

认证附加回归(独立统计)

共实际运行 5 项:3 项通过;2 项旧强制改密用例受当前路由契约阻断,未验证到原断言。主报告 9 项结果单独统计。

Edge headless,http://127.0.0.1:6180,认证 API 全部由 Playwright 拦截模拟;trace/video 关闭。

仅模拟认证接口与浏览器交互,不使用真实账号,不验证后端认证规则或真实密码修改。

未运行依赖真实账号的 auth.spec.ts 全量;仅更新其中接口错误提示的断言选择器。

两条旧强制改密用例没有通过,不能作为当前改密功能验证证据;既有路由策略不在本轮提示展示调整范围。

PASS

859:无可登录教员时账号选择器禁用

保留业务空态,选择器不可展开。

无教员业务空态
无教员业务空态
BLOCKED

861:旧强制改密不一致校验

当前 /change-password 对已认证用户重定向 /dashboard;旧 fixture 只有强制改密标记而无工作台权限,后续导航取消,停留在启动页,未进入改密表单。该旧用例不适用于当前路由契约,本次未改路由、未跳过或记为通过。

Playwright 原始状态:failed。

旧改密入口阻断
旧改密入口阻断
BLOCKED

864:旧强制改密停用账号提示

与 861 相同的既有路由契约阻断,未能提交初始改密接口,也未验证一次性登录提示。原始失败证据保留。

Playwright 原始状态:failed。

旧停用账号流程阻断
旧停用账号流程阻断
PASS

普通会话过期不泄露后端内部详情

跳转登录页,登录错误栏为空,不显示内部会话或刷新令牌详情,仅发起一次刷新请求。

PASS

当前管理员登录 API 401 错误使用自动消失的 Message

实际点击登录;mock POST /auth/login 返回 401。只出现一条 .el-message--error,#login-error 始终为空;未点击关闭,Message 自动消失。登录请求 1 次,刷新请求 0 次。

登录失败 Message
登录失败 Message
Message 自动消失后
Message 自动消失后

构建与聚焦逻辑验证

PASS · unreal_tran_web
pnpm run build
最终 vue-tsc、Vite 与 legacy iframe public/dist 哈希校验通过;仍有既有 chunk 体积提示。 日志

PASS · ute2e
node --test tools/scene-cover-api.test.mjs tools/guide-error-message.test.mjs
20/20 通过,包含保存失败只提示一次、阻断发布与离开,以及指导书/场景错误提示回归。 日志

PASS · ute2e
pnpm exec tsc --noEmit --target ES2022 --module ESNext --moduleResolution Bundler --strict --types 'node,@playwright/test' tests/api-error-messages.spec.ts api-error-messages.config.ts
本轮新增浏览器测试与配置类型检查通过。

PASS · unreal_tran_web、ute2e
git diff --check
主任务检查通过;报告生成后再次核验本轮文件。

范围与复现

这是接口失败展示的聚焦浏览器回归,未逐一遍历所有业务页面。

页面渲染、Element Plus Message、缓存路由和 Axios 超时均运行于真实浏览器;服务端响应由测试模拟。

模型 iframe 项为真实宿主桥接的 DOM 合同测试,使用空画布夹具,不代表完整 GLB 模型加载测试。

保留训练业务状态、表单校验与重试入口。未扩大教学流程、权限或接口合同。

pnpm exec playwright test -c api-error-messages.config.ts

报告重新生成:node tools/build-api-error-message-report.mjs