Switchyard

Switchyard Testing Pyramid

Status

Why This Page Exists

测试金字塔不是“测试多不多”的漂亮话。
它更像盖楼时的检测顺序:

如果顺序反过来,项目就会很痛。

Current Pyramid

1. Unit tests

位置示例:

它们负责:

2. Integration tests

位置示例:

它们负责:

3. E2E tests

位置示例:

它们负责:

4. Docs frontdoor contract tests

命令:

它们负责:

5. Live gates

命令:

这层不是普通自动测试,而是更接近真人验收。

这里要再加一条边界,不然很容易把它们误读成“云端 CI 也该跑”:

更直白一点说:

GitHub Hosted Runner 负责验“仓里的代码和合同有没有坏”。 真实登录态 / 真实 Chrome Profile / 已登录浏览器会话,只能在 credentialed workstation 上验。

这里的“真实 Chrome Profile”现在要具体理解成:

Current Gate Meanings

CI Policy

当前仓继续只用 GitHub Hosted Runner。

如果在 CI 环境中误触发 live gate,当前脚本应该 fail-closed,直接说明:

而不是假装还能在云端复现本地 credentialed 路径。

5-Layer Governance

如果把这仓的验证链理解成 5 道安检门,当前 SSOT 是:

Layer Current role Current default surface
pre-commit 最早拦截 secrets 与 focused hygiene drift pnpm run hook:pre-commit
pre-push 本地提交前总闸 pnpm run hook:pre-push
hosted GitHub Actions on push/pull_request ci.yml / security.yml / workflow-hygiene.yml
nightly hosted-safe scheduled recheck scheduled workflow + nightly-timed dependency automation
manual credentialed workstation realism verify:* / reality:gate / browser diagnosis / runtime hygiene

说得更直白一点:

前四层是“仓里的合同和代码有没有坏”。 第五层才是“真人浏览器、真人登录态、真人账号动作有没有真的过关”。

What This Repo Tries To Avoid

Coverage Philosophy

这仓当前更重视的是:

而不是只追一个好看的 coverage 数字。

Coverage Entry Point

现在仓里已经有一个 committed coverage 入口:

它会产出:

如果你还需要本地 HTML 报告,走单独的辅助入口:

更直白一点说:

以后接手的人不需要再临时拼一长串 vitest --coverage 参数,
直接跑这一条命令,就能拿到可复验的 coverage 报告。

更直白一点说:

一张 95% 的 coverage 报表,如果 live gate 全是假绿,意义不大。
一张稍低一点但结构 honest 的测试网,反而更值钱。

所以这仓对 coverage 的态度是: