Skip to content

test(services): 包内 test 脚本对齐 vitest,修复整包测试无法运行 - #56

Merged
SudoUserReal merged 3 commits into
ZCodium-project:mainfrom
yachen4ever:fix/services-vitest-test-script
Oct 18, 2026
Merged

SudoUserReal merged 3 commits into
ZCodium-project:mainfrom
yachen4ever:fix/services-vitest-test-script

Conversation

@yachen4ever

Copy link
Copy Markdown
Collaborator

Closes #53

改动(1 文件,+1/−1)

packages/services/package.json 的 test 脚本从 tsx --test test/*.test.ts test/*.test.mjs 改为:

"test": "vitest run --root ../.. packages/services"

为什么是这个形态

验证

  • pnpm --filter @zcode/services test:2093 通过 / 25 跳过(Windows 11 / node 24.14.0 / pnpm 10.33.2)。
  • 1 个并发迁移用例(DB109-06,两线程同时打开旧库)在重负载下偶发失败,单独重跑 10/10 通过,与本改动无关(此前根入口全量运行同用例亦通过)。

@yachen4ever

Copy link
Copy Markdown
Collaborator Author

说明一下两个检查的状态,供排查参考:

@SudoUserReal

Copy link
Copy Markdown
Contributor

本地验证发现:脚本形态会让部分测试因 cwd 失败

在 `verify/pr56` 上把 main(3a71ce0c)合入后从包目录执行新脚本:

cd packages/services && pnpm test
→ Test Files 3 failed | 204 passed;Tests 2 failed

失败点都是路径重复(`packages/services/packages/services/...`):

  • `test/agentProxyEnv.test.ts:241`:`readFileSync(resolve(process.cwd(), "packages/services/src/node.ts"))` → ENOENT
  • `test/tasksDatabaseMigration.test.ts:232`:`resolve("packages/services/src/session/tasksDatabase/migrations.ts")` → esbuild Could not resolve

原因:`vitest run --root ../..` 只改 vitest 的 root,Node 进程 cwd 仍是 `packages/services`;这两个测试用 `process.cwd()` / 裸相对路径定位仓库内文件。

对照验证(同一 head):

# 仓库根执行,cwd = 仓库根
npx vitest run packages/services
→ Test Files 207 passed | 1 skipped;Tests 2141 passed   ✅

# 包目录执行、但 cwd 拉回仓库根
cd packages/services && cd ../.. && npx vitest run packages/services
→ 同上全绿   ✅

(另外包内跑时 `atomicFileUtils.test.ts > preserves permission errors...` 也失败过一次,单独重跑通过,疑似并发 flaky,建议确认。)

建议修法(二选一)

  1. 脚本改为保持 cwd 在仓库根:
    "test": "cd ../.. && vitest run packages/services"
  2. 或把那两个测试改成基于 `import.meta.url`(`fileURLToPath(new URL("../../..", import.meta.url))`)定位仓库根,一劳永逸去掉对 cwd 的依赖(推荐,其他测试也可能有同类隐患)。

当前形态虽然让 203 个 vitest 测试能启动,但整包仍非全绿,暂不合并。

--root ../.. 只改 vitest 的 root,Node 进程 cwd 仍是 packages/services:
agentProxyEnv 的源码断言(process.cwd() 拼 packages/services/src/node.ts)与
tasksDatabaseMigration 的 esbuild entryPoints/alias(裸相对路径)在包内运行时
解析失败(维护者 PR ZCodium-project#56 本地验证发现)。改为 fileURLToPath(new URL("../../..",
import.meta.url)) 从测试文件自身定位仓库根,包内/根目录两种运行方式等价。
@yachen4ever
yachen4ever force-pushed the fix/services-vitest-test-script branch from 5b2cd0b to d220daf Compare October 18, 2026 09:26
@yachen4ever

yachen4ever commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator Author

已按你推荐的方案 2 修复并重推(分支重建到当前 main 9cd5e0e,含已合并的 #57/#58/#40):

  • agentProxyEnv.test.ts 的源码断言、tasksDatabaseMigration.test.ts 的 esbuild entryPoints/alias,均改为 fileURLToPath(new URL("../../..", import.meta.url)) 从测试文件自身定位仓库根,不再依赖 Node 进程 cwd;
  • 包内复跑(与你验证同场景):cd packages/services && pnpm test → 207 files passed | 1 skipped,2118 tests passed | 25 skipped,0 失败——两个原失败用例在包内通过;
  • atomicFileUtils 那次并发失败本轮未复现(包内全量通过),保持观察;
  • 两个文件已过 oxfmt(chore(fmt): oxfmt 归一 scripts/pnpm-cli-resolver.mjs,恢复 fmt:check 绿 #60 同款归一);notices 已按 CI 产物回填,检查全绿。

顺带:上游 main 当前 inventory.json 相对新基线也有漂移(#57/#40/#58 合入后未回填,push main 的 licenses 检查应也是红的)——本 fork 同步时已按产物回填,供参考。

@SudoUserReal
SudoUserReal merged commit 192f9b8 into ZCodium-project:main Oct 18, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

test(services): 包内 205 个测试文件 203 个已 vitest 化,test 脚本仍是 tsx --test,整包测试跑不起来

2 participants