# 教学实施模块测试报告 ## 1. 本轮结论与边界 本轮对教学实施模块执行了浏览器级状态化 UI 契约回归,覆盖指导书、训练记录、教员预览、对抗监控、三通道运行工作台、正式考核保护和沉浸本地配置。 > **重要:本报告中的 16 项通过均基于 Playwright 状态化 Mock,不等于真实 API、KingBase、Redis、Nginx 或测试服务器联调通过。** Mock 会按照最终公开 API 校验方法、DTO、版本、角色和状态变化,但不会访问或修改真实 UAT 数据。本轮没有启停服务,也没有清理真实测试数据。 | 验证层级 | 本轮状态 | 说明 | | --- | --- | --- | | Playwright 状态化 UI 契约 | 通过 | 16 / 16,Chromium 单 worker | | E2E TypeScript | 通过 | `tsc --noEmit` | | 真实 API 只读联调 | 未执行 | `teaching-live.spec.ts` 独立执行,不能由 Mock 结果替代 | | Java 策略与数据库测试 | 不在本报告范围 | 由 API 工程测试负责 | | 部署环境烟测 | 不在本报告范围 | 由发布后的 IP + 端口环境验证 | ## 2. 本轮重点回归 ### 2.1 指导书与训练记录 - 从虚拟仿真任务模块进入“作业指导书”。 - 打开 2 章 3 步的正式发布指导书,依次阅读“断电隔离”“压力释放”“复装与复测”。 - 验证章节目录、正文、安全要求、验收标准、技术参数和阅读进度。 - 从全文阅读返回指导书列表,再返回训练任务页。 - 从任务页进入训练记录,验证搜索区与单一表格结构。 - 打开训练记录详情,验证成绩、评定结果和 `2 / 2` 步骤快照。 - 从详情返回记录列表,再进入“完整过程”。 - 完整过程展示真实运行工作台和服务端公开事件;教员身份为只读观察,不出现学员写操作。 - 从完整过程返回后仍保持 `?view=records`,再可回到训练任务页。 ### 2.2 教员预览 - 教员预览为完整工作台:步骤树、真实 Three.js 场景、教学指导、数字教员、规则检测点、操作坞和视角控制均存在。 - 不使用 iframe。 - 预览中的步骤试走和过程记录仅保存在浏览器内。 - 测试对比交互前后的请求,`POST / PUT / DELETE` 数量保持不变。 - 未接入的语音和规则执行明确标识,不伪造成功结果。 ### 2.3 对抗任务监控 - 从任务卡进入独立监控路由 `/teaching/confrontation/tasks/{assignmentId}/monitor`。 - 验证 RED、BLUE 两条运行可切换,当前运行、成员、进度、事件和三维场景随选择更新。 - 验证监控页加载真实 Three.js 画布和已发布训练资产。 - 验证故障注入采用最终 API 公私载荷契约:公开载荷只有故障引用和公开说明;故障真值仅进入 `privatePayload`。 - 创建干预后继续调用激活接口,并在监控页显示活动干预。 - 从监控页进入三维观察,教员只能查看运行状态,不出现岗位推进和团队提交按钮。 ### 2.4 三通道运行工作台与正式考核 - 虚拟仿真:步骤轨、三维场景、规则目标、数字教员、运行日志和操作坞。 - 实装实训:步骤轨、实装镜像工位、设备/视觉/人工事件通道、过程评定和事件时间线。 - 对抗训练:步骤与岗位、三维协同态势、团队成员、公开故障、教学干预和负责人提交边界。 - 三个通道均不使用 iframe,均加载发布场景资产。 - 正式考核只消费服务端 execution 投影;页面只显示当前步骤,后续内容不从完整定义泄露。 - 正式考核不显示操作帮助、过程记录、回放、演示、提示和数字教员。 ### 2.5 沉浸交互本地配置 - 修改“扳机键”映射并保存到 `unreal-tran:teaching-xr-preferences:v1`。 - 刷新页面后从 `localStorage` 恢复映射。 - 点击“恢复默认”后还原默认映射并删除本地配置键。 - 本地配置只保存呈现模式和按键映射,不保存训练进度、校准结果或设备位姿。 ## 3. 自动化执行结果 | 检查 | 命令 | 结果 | | --- | --- | --- | | TypeScript | `npm run typecheck` | 通过 | | 新增聚焦回归 | `npx playwright test tests/teaching-module.spec.ts --project=chromium --reporter=list -g "指导书和训练记录\|对抗任务监控\|三通道运行工作台\|本地按键配置"` | 4 / 4 通过,57.1 秒 | | 教学模块全量 + 教员预览 | `npx playwright test tests/teaching-module.spec.ts tests/teaching-preview-workbench.spec.ts --project=chromium --reporter=list` | 16 / 16 通过,2.7 分钟 | 全量 16 项包括: 1. 六入口、指导书全文阅读、记录详情与完整过程往返。 2. 对抗独立监控、运行切换、三维观察和故障注入。 3. 虚拟/实装/对抗三通道工作台及正式考核锁定。 4. 沉浸本地配置保存、刷新恢复和恢复默认。 5. 纯行政任务与数据中心只读边界。 6. UNION 行政 + 学员 COMMON 领取、开始、推进、提交和评定闭环。 7. 超时结算和权限边界。 8. 教员人工结束运行并继续评定。 9. 对抗开训前结束与开训后超时边界。 10. 实装两步 `physical-events` 权威推进。 11. ASSIGNED 预建运行接收。 12. 对抗多岗位推进、负责人提交与公开干预。 13. 正式考核 Unix 秒和辅助能力锁定。 14. 发布资产加载与 WebXR 桌面会话起止。 15. 数据中心安全明细和 Unix 秒筛选。 16. 教员预览完整工作台与零写请求。 ## 4. 状态化 Mock 与最终 API 的一致性 - 学员进度只提交 `completedStepCode` 和动作证据;百分比及下一步骤由服务端响应派生。 - 实装步骤只通过 `/runs/{id}/physical-events` 推进,不绕行通用 progress。 - 对抗岗位校验 actionCode、岗位和负责人提交资格。 - 正式考核使用 `/runs/{id}/execution` 安全投影,不向学员下发完整定义。 - 教学干预允许管理身份提交服务端私密载荷;公开载荷若包含 `privateTruth`、`triggerConfig`、`solution`、`answer` 或 `truth` 会被 Mock 拒绝。 - 激活干预使用版本号,返回服务端权威 `ACTIVE` 状态。 - 预览不调用写接口;本地沉浸偏好不调用教学 API。 - Mock 返回的时间字段遵循 Unix 秒口径。 ## 5. 视觉证据 成功截图位于 `ute2e/artifacts/screenshots`,本轮新增的关键标签如下: - `teaching-guide-full-reader` - `teaching-training-record-detail` - `teaching-training-record-full-process` - `teaching-module-guide-record-roundtrip` - `teaching-confrontation-monitor-switch` - `teaching-confrontation-observer-runtime` - `teaching-runtime-virtual-workbench` - `teaching-runtime-physical-workbench` - `teaching-runtime-confrontation-workbench` - `teaching-runtime-formal-exam-lock` - `teaching-immersive-local-config-saved` - `teaching-immersive-local-config-restored` - `teaching-teacher-preview-initial` - `teaching-teacher-preview-workbench` 抽检结果:指导书正文、记录详情、对抗监控、三通道工作台、正式考核保护、沉浸配置和教员预览均能形成可判读的中文视觉证据;模型画布可见,页面未出现 iframe 或空白工作区。 ## 6. 制品位置 - HTML 报告:`ute2e/artifacts/html-report/index.html` - JSON 结果:`ute2e/artifacts/results.json` - 成功截图:`ute2e/artifacts/screenshots` - 失败诊断:`ute2e/artifacts/test-results` - 状态化 Mock:`ute2e/tests/teaching-contract-mock.ts` - 教学模块用例:`ute2e/tests/teaching-module.spec.ts` - 教员预览用例:`ute2e/tests/teaching-preview-workbench.spec.ts` 真实环境联调必须单独执行并单独报告;不得把本报告的 Mock 通过结论写成“真实后端已联调通过”。