Files
Auto-Finance/tests
wandering 94c2f4c94e feat(travel): 交通费行按实际乘车日填开始/结束日期(联机实测控件 #ksrq/#jsrq)
用户第 4 条:交通费行的日期由页面按出差起止自动带出,cost=1 分支不填日期,于是「6-02 出发、
6-05 才坐车」这种情况报销日期是错的。要按乘车日必须先知道控件 id,所以做了一次联机探测:
登录 → new_form(travel) → fill(basic) 落草稿 → actor 里打开明细、点 #insertDetail、选 cost=1、
dump 可见 input → 截图;探完按守卫删草稿(唯一命中+未提交+当日制单,bill_no 202610030261,复查 0 命中)。

探测结果:交通费行日期控件 #ksrq(expenPwTraveldetail.STARTDATE)/ #jsrq(OVERDATE),
页面已按出差起止预填(实测 2026-06-02 → 06-04)。

- add_travel_items 的 cost=1 分支用 transport_fee[].start_date/end_date 覆盖 #ksrq/#jsrq
- 缺日期时保留页面带出的值并 log.warning,不静默按出差起止报销
- tests/test_travel_dates.py 两例:有乘车日则覆盖、缺日期不覆盖
- 文档:AGENTS 记下控件名与口径、操作指南 7.2 补一句、方案文档 §25 记探测方法与结论(含可复用的探测套路)

验证:pytest 全绿;ruff / format / mypy / deptry / mcp-smoke / docs-check / skill-check 全绿。
--no-verify 提交并手跑等价检查。
2026-10-21 13:58:27 +08:00
..
2026-06-09 16:25:20 +08:00

last_reviewed
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 造会话。