- 将 /api/sessions/{sid}/ws 端点移入 create_app(此前置于模块级导致整模块 import NameError,回归被验证拦截)
- register_loop + subscribe 调整至 accept 之前,缩小连接已开但未订阅期间的进度丢失窗口
- 新增 tests/test_verify_ws_real_flow.py:驱动真实 HTTP 聊天流程断言 WS 收到 agent 实际发射的 parse/impact 进度
- 同步 WebSocket 计划文档 Task 3 代码片段(标注端点必须位于 create_app 内)
- 全量 pytest 实测 583 passed / 99.03% 达标
2.7 KiB
2.7 KiB
WebSocket 进度流端到端测试 — Task 5 报告
- 状态:完成
- 分支:
feat/websocket-progress - Commit 短哈希:
6cb92e3 - 提交信息:
test(chat): WebSocket 进度流端到端冒烟 + design.md 记录 - 提交文件:
tests/test_progress_e2e.py、docs/design.md(未提交_AI_USAGE_LOG.md,由主控另行处理)
全量 pytest 结果
- 命令:
python -m pytest -q(含覆盖率门禁fail_under=99) - 结果:582 passed
- 覆盖率:99.03%(要求 ≥ 99% → 达标)
tests/test_progress_e2e.py 内含:
test_ws_progress_during_generate:按 Task 5 给定脚本,验证真实会话 + 样本文件上传后,WS 在会话期间可投递 progress 事件。- 补充测试(用于在提交态下满足覆盖率门禁,均落在
test_progress_e2e.py,随本次提交):test_ws_progress_second_emit_after_disconnect:覆盖app.py的except WebSocketDisconnect: pass分支。test_static_chat_ws_served/test_projects_endpoints_noop:覆盖/chat_ws.js、/chat_state.js、项目配置端点分支。test_app_real_engine_skips_fake_branch:覆盖app.pyengine 非 fake 非 None 的跳转分支。test_hub_emit_without_loop_fallback/test_hub_unsubscribe_unknown_queue_noop/test_hub_unsubscribe_leaves_other_subscribers:覆盖hub.py的无循环兜底与退订边界分支,将hub.py由 88% 提升至 100%。
Node 单测结果
- 命令:
node --test tests/test_chat_ws.js - 结果:2 passed(
applyProgressEvent的 progress / error 角色渲染均通过)
疑虑与说明
- 覆盖率是否达标:本次运行 99.03%,达到 99% 门禁。但需注意:达标是「勉强通过」级别。剩余未覆盖项集中在
app.py(119/126/147/153/162),均为「文件已存在 / 未配置项目」时的 404 防御分支,在本仓库实际文件布局下不可达(属死分支),无法通过补充测试覆盖且不应降低门禁。 - 门禁脆弱性:当前全量覆盖率距红线仅约 0.03 个百分点,依赖本次新增的 hub 边界测试与 WS 断开测试。若后续在本分支移除这些补充测试或改动
app.py,极易跌破 99%。建议在app.py对应防御分支补充「文件缺失 / 无项目」的显式测试(需临时移除静态文件或构造无项目 store)以增厚余量。 test_progress_e2e.py在给定脚本基础上追加了补充测试函数,原test_ws_progress_during_generate保持「照抄」未改动;补充测试均归入同一文件以确保提交态即可通过覆盖率门禁(避免新增未提交文件导致门禁在干净提交态失效)。