Skip to content

pnpm --filter @object-ui/app-shell test 跑的是 @object-ui/console 的 22 个文件,app-shell 自己的 276 个一个没跑,却报绿 #3378

Description

@yinlianghui

发现于 objectui#3352 的验证环节 —— 不在该单范围内(#3352 只动 3 处成功包络读点),按 Prime Directive #10 单独记录,不认领。

现象

packages/app-shell/package.jsontest 脚本是裸的 vitest run。从包目录跑时(即 pnpm --filter @object-ui/app-shell test 的实际行为),vitest 把 root 定为 packages/app-shell,根级 projects(unit / dom / dom-heavy)的 include 因此匹配不到任何东西,只有以路径引用进来的 apps/console project 仍然解析成功。结果:

$ cd packages/app-shell && pnpm exec vitest run
 RUN  v4.1.10 /home/user/objectui-issue-3352/packages/app-shell
 Test Files  22 passed (22)
      Tests  208 passed (208)

这 22 个文件全部属于 @object-ui/console,不是 app-shell 的:

$ cd packages/app-shell && pnpm exec vitest list
[@object-ui/console] src/LocalizationFetchProvider.test.tsx > ...
[@object-ui/console] src/LocalizationFetchProvider.test.tsx > ...

而 app-shell 自己有 276 个测试文件(find packages/app-shell/src -name '*.test.ts*' | wc -l → 276)。从仓根按目录过滤才真的跑到它们:

$ pnpm exec vitest run packages/app-shell/
 Test Files  276 passed (276)
      Tests  2414 passed | 1 skipped (2415)

为什么值得收

它产生的是一个假绿,而不是一个报错。 输出格式完全正常(22 passed),没有任何 "0 tests matched" 之类的信号;一个按包级约定验证的 agent 会据此报告「app-shell 整包绿」,实际上该包一个测试都没跑。这与 #3288(--run 路径过滤被静默忽略)是同一族失效模式:命令看起来成功了,覆盖面却悄悄塌了。危险面在于它恰好跑出 208 个别的包的通过用例,数量级看着像回事。

#3240 相关但不同:#3240 问的是「17 个本地 vitest.config.ts 的包里哪些真的需要」;本单是一个不带本地 config 的包,正因为没有本地 config 才 fall through 到收集别人的 project。#3240 的裁定大概率会覆盖到这里的修法,但两者的完成范围不重合,故单独立案。

复现

cd packages/app-shell && pnpm exec vitest list | head   # 全是 [@object-ui/console]

可能的方向(留给认领者判断)

顺带:AGENTS.md 目前只钉了 #3288 那条陷阱(路径过滤被忽略),没覆盖本条(包级 test 跑成别的包)。修完值得补一句。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions