测试覆盖:从模块目录到一条 RBAC 路由矩阵
“49 个模块测试目录”只说明广度;质量取决于用例如何钉边界。下面用一条真实的 RBAC 路由矩阵说明测的是什么行为。
test/ 下目录名对应模块(如 rbac/、audit/、trigger/、team/)。改哪个模块,就优先跑该目录,回归网清晰。每个治理能力有独立目录,降低“功能无测试”的盲区。按 unit/ / integration/ 横切时,改一个模块往往要跨目录搜用例,更容易漏回归。
目录里同时覆盖会话/工具/提供方等内核行为,以及 RBAC、身份、组织、团队、触发器、保留、观测等治理行为。
一条 RBAC 路由矩阵
Section titled “一条 RBAC 路由矩阵”路由权限用例用数据表穷举角色 × 方法 × 路径:
const cases: Case[] = [ ["operator", "GET", "/global/config", true], ["operator", "PATCH", "/global/config", false], ["approver", "PATCH", "/global/config", false], ["operator", "POST", "/global/dispose", false], ["operator", "GET", "/global/dispose", true], ["admin", "POST", "/global/dispose", true], ["operator", "POST", "/global/retention/run", false], ["admin", "POST", "/global/retention/run", true], ["readonly", "GET", "/global/health", true], ["operator", "POST", "/session/abc/init", true], ["operator", "PATCH", "/prefs", true],]
for (const [role, method, path, want] of cases) { test(`${role} ${method} ${path} → ${want}`, () => { expect(allowed(role as never, method, path)).toBe(want) })}三点边界(越权类缺陷常出没处):
同一路径,读与写不同。 /global/dispose 的 GET 对 operator 开放,POST 仅 admin。鉴权是路径 × 方法,不是只认路径。
例外写进用例。 GET /global/health 对 readonly 也为真。探活不能被权限收口误伤;例外靠测试钉死,不靠默契。
回归护栏。 operator 仍能初始化会话、改偏好——收紧全局写权限时,不能锁死常规执行路径。
权限问题的形态是“某角色在某方法+路径组合下被放行或拦错”。矩阵把组合穷举钉死,新增路由时补一行即可。
隔离用 fixture
Section titled “隔离用 fixture”临时目录 fixture 为每个用例提供独立目录,可选初始化 git / 写配置,结束自动清理,路径做空字节清洗(CI 防御)。多租户、多实例类隔离问题,只有在用例互不污染时才能稳定验证。
相关阅读: