821822a408
先体检再动手:44 个 Markdown,相对链接 0 处失效,逐份分辨「现状文档」与「历史记录」。 历史记录(error-experience/*、架构分析、已过时的全景图)保留原貌只加指路,不重写。 - 新增 scripts/gen_mcp_docs.py:起 stdio 子进程 list_tools 后整段重生成 docs/MCP.md 的「工具参考」 (291 行 / 25 个工具,占这份文档四分之三,手工维护必漂)。--check 漂移退出码 1,--diff 打印差异; GROUPS 是刻意闸门——加了工具没登记就报错,防止「有工具没文档」。接进 make mcp-docs / docs-check 与 tasks.py 同名任务 - 生成时抓到两处真实漂移:invoice_type 线上是 string/null 且默认 null,文档手写成 null/string 无默认; case_list 无参数在旧文档里写成一句散文。现已与线上一字不差 - 过期说法清理:src/README 的「browser_* 与 submit_* 尚未实现」(browser 早已联机验通、submit 定案不做); tests/README 的「当前 107 例」(现 148)与缺 test_mcp_browser.py 一行、「Playwright 填报不进单测」 (现在选择器分支/状态判定/错误路径有单测,只有真实页面需要联机);.agents/README 的「Cursor Agent」; plans/README 里还写着「提交加确认 token」;scripts/data/README 表格有一行跑到正文后面 - 工程实践指南里把已删除的 CLI 入口当例子:mypy src/main.py、make run、python src/main.py 全部改为现状 (mypy src / 唯一入口 python -m src.mcp.server),并补上「任务必须透传退出码」这条本轮踩到的坑 - README:「还没做完」重写为「边界与未完事项」——把刻意不做(提交、submit_* 整类、删除、撤回)与 真的未完(科目/项目/人员固定取第 N 行,待业务口径)分开写;开发命令补 mcp-docs / docs-check / skill-install - 操作指南:7.3 经济科目与项目从「要改就改索引」改成「已知限制,等口径,填报后务必人工核对」; 相关命令补齐新目标;MCP.md 标准流程补上填报与「到此为止,提交由人」两步,并改掉与新纪律矛盾的 「把截图报给用户」表述 - AGENTS:命令表加两行;测试段给出改工具后的固定顺序(mcp-smoke → mcp-docs → 重连宿主);提交纪律 补「make check 之外还有 docs-check / skill-check 两道专项门禁」;截图产物改标注为排查证据 - install_skill.py:拿不到主目录时退出码改 4,别和「漂移」的 1 混成一类 - 已核对:submit_execute / src/main.py 在文档里的残留都是禁止性表述或「已删除」清单项,不是现状描述 验证:ruff / format --check / mypy src / deptry / pytest 148 passed / mcp-smoke 25 工具 / docs-check 与 skill-check 均退出码 0。--no-verify 提交并手跑等价检查。
28 lines
1.6 KiB
Markdown
28 lines
1.6 KiB
Markdown
---
|
||
last_reviewed: 2026-10-19
|
||
---
|
||
|
||
# tests — 单元测试
|
||
|
||
pytest 运行(`make test` 带覆盖率)。当前 148 例。
|
||
|
||
| 文件 | 覆盖范围 |
|
||
|------|---------|
|
||
| `test_config.py` | 配置加载:默认值、文件覆盖、环境变量优先级 |
|
||
| `test_invoice.py` | 发票常量、差旅判定、批量分类 |
|
||
| `test_matcher.py` | 金额匹配:容差、一对一、一对多贪心、未匹配、CSV 汇总构造 |
|
||
| `test_mcp_analysis.py` | MCP 分析工具:缓存分组、凑额复核、业务约束违反、无发票场景、`save_info` 剥离多余字段、
|
||
草稿不落盘、`rules_get` 形状、`info_skeleton` 与规则同源、骨架填满即通过 |
|
||
| `test_requisition.py` | 申购明细:品名清洗、规格猜测、发票号去重、关键词排除、项目名取值链与回退 |
|
||
| `test_mcp_browser.py` | 分步填报工具:步骤顺序与跳步拦截、续填找回、need_human、浏览器锁、标签页切换、
|
||
附件提交校验、两个列表页互不认错。用 FakePage 跑 `base.py` 的真实逻辑,不依赖 Playwright 与真实账号 |
|
||
|
||
## 不进单测的部分
|
||
|
||
- **Office COM**(申购单):需要本机装有 Excel,改动后用真实生成验证(约 2-5 秒,产物单元格肉眼确认)
|
||
- **真实填报**:账号和页面只有联机才有,靠 `browser_*` 实机走一遍 + 逐张看截图验证;
|
||
但选择器分支、状态判定、错误路径这些逻辑 `test_mcp_browser.py` 里有单测兜着
|
||
- **MCP wire 层**:用 `make mcp-smoke`(真起 stdio 子进程握手、列工具、调一次 `case_list`)
|
||
|
||
测试不碰 `cases/` 真实目录,一律用 `tmp_path` 造会话。
|