测试与验证

Hover 的测试分层交付。把它们当作发布关卡来用。

单元测试 —— Vitest,按包运行

pnpm test                              # 在整个 workspace 中扇出运行
pnpm --filter @hover-dev/core test     # 只跑单个包

测试放在 packages/*/tests/。保持 src/ 只含源码——不要把 *.test.ts 放进 src/

集成 / 端到端 —— Playwright 自测(dogfooding)

晶化后的 spec 作为标准的 @playwright/test 运行——回路中没有 agent,只有保存下来的脚本。这正是晶化的意义所在:CI 运行纯粹的 Playwright,零 AI。用 BASE_URL 把一个 spec 指向任意环境。

手动端到端(回路中有 agent)

完整回路——agent 通过 MCP 驱动浏览器并晶化出一个 spec——靠手动执行:

  1. 把本地 MCP 添加到你的 agent(或用 pnpm --filter hover-dev package 旁加载扩展)。
  2. 启动任意目标开发服务器(一个普通的 Vite / Next 等应用;其中不安装任何与 Hover 相关的东西)。
  3. 运行 /mcp__hover__test_app 并驱动一条真实流程。

没有脚本化的 smoke 回路;手动端到端不属于 CI 的一部分。

验证策略

在把工作标记为就绪之前:

  1. pnpm typecheck —— 扇出到每个包。
  2. pnpm test —— Vitest,扇出到每个含测试的包。
  3. pnpm build —— 确认每个包都能干净地构建。
  4. 与所改动文件相匹配的手动端到端(MCP 运行或扩展旁加载)。

这套流程也正是发布工作流为一次发布设置的关卡。