在 objectui#3275(PR #3285)的验证过程中撞到,按 Prime Directive #10 单独记录。
现象
用包级过滤加路径跑测试时:
pnpm --filter @object-ui/app-shell test -- --run <paths>
路径过滤被静默忽略。加了新测试文件之前和之后,输出都是同一个 Test Files 20 passed (20) / Tests 183 passed (183) —— 也就是说新写的测试一个都没有执行,而输出看起来完全正常:全绿、有数字、没有任何警告。
vitest 按仓库根解析 pattern,包级 --filter 转发过去的相对路径匹配不到任何东西,于是退回跑该包的默认集合。
正确的跑法
从仓库根:
pnpm exec vitest run packages/app-shell/src/views/... --maxWorkers=2
换过去之后立刻抓到一个真实失败(AppPreview.test.tsx 里 getByText 命中了重复元素)—— 那个失败在错误的调用方式下被完全隐藏了。
为什么值得单独修
这是本仓反复出现的那一类缺陷的元层版本:一个「看起来跑了」的验证等于没验证。
危害具体在:
- agent 与开发者会据此报告"测试通过",而实际上新增的覆盖一次都没执行 —— 本轮就发生了一次,靠换命令才发现;
- 它不报错、不警告,只是安静地跑了别的东西,所以没有任何自然的发现路径;
- AGENTS.md 建议本地只跑受影响的包,而包级过滤正是最自然的写法 —— 也就是说推荐路径与陷阱重合。
与 objectui#3240(两套 vitest 配置对同一文件给出不同结论)是同一族:门禁在特定调用方式下给出的答案不作数。
建议方向
至少三条,不预设结论:
- A. 让它报错而不是静默退化:若包级
test 脚本能检出"传了路径但一个都没匹配上",就 exit 非零。最小改动,直接消除"安静跑错东西"。
- B. 在 AGENTS.md / 测试文档里写明正确调用方式,并说明包级过滤 + 路径不生效。成本最低,但只对读文档的人有效。
- C. 让包级
test 脚本正确转发路径(把相对路径改写成仓根相对)。最彻底,但要确认不会破坏现有调用方式。
倾向 A + B(让错误方式响亮失败,同时把正确方式写下来);C 更彻底但需要评估 turbo / vitest 两层的转发行为。
⚠️ 排期:本条属测试基础设施,不是 v17 协议类或严重 bug,建议发布窗口之后处理。记在这里以免再有人踩。
发现路径:objectui#3275 / PR #3285 的验证。
在 objectui#3275(PR #3285)的验证过程中撞到,按 Prime Directive #10 单独记录。
现象
用包级过滤加路径跑测试时:
路径过滤被静默忽略。加了新测试文件之前和之后,输出都是同一个
Test Files 20 passed (20) / Tests 183 passed (183)—— 也就是说新写的测试一个都没有执行,而输出看起来完全正常:全绿、有数字、没有任何警告。vitest 按仓库根解析 pattern,包级
--filter转发过去的相对路径匹配不到任何东西,于是退回跑该包的默认集合。正确的跑法
从仓库根:
换过去之后立刻抓到一个真实失败(
AppPreview.test.tsx里getByText命中了重复元素)—— 那个失败在错误的调用方式下被完全隐藏了。为什么值得单独修
这是本仓反复出现的那一类缺陷的元层版本:一个「看起来跑了」的验证等于没验证。
危害具体在:
与 objectui#3240(两套 vitest 配置对同一文件给出不同结论)是同一族:门禁在特定调用方式下给出的答案不作数。
建议方向
至少三条,不预设结论:
test脚本能检出"传了路径但一个都没匹配上",就 exit 非零。最小改动,直接消除"安静跑错东西"。test脚本正确转发路径(把相对路径改写成仓根相对)。最彻底,但要确认不会破坏现有调用方式。倾向 A + B(让错误方式响亮失败,同时把正确方式写下来);C 更彻底但需要评估 turbo / vitest 两层的转发行为。
发现路径:objectui#3275 / PR #3285 的验证。