# 巡樓後端 · 測試政策(Phase C) > 對齊 `spec.md` §9(184 IDs)與 §9.18。 > Task 入口:`tasks/INDEX.md`。 ## 1. 為什麼 §9 是 **Given/When/Then 全量驗收**,不是示意清單。 「功能 task 做完 + 手測一下」**不算** P0/P1 過關。 ## 2. 四層測試 | 層 | 位置 | 工具建議 | 必須 | |----|------|----------|------| | Unit | `apps/backend/internal/**/*_test.go` | `go test` | 邏輯/guard/計費規則;**路徑根 = apps/backend** | | API Integration | 同上 + `//go:build integration` 可選 | testkit + Mongo/Redis | 每條 §9 ID 主路徑 | | Contract | `TestX_*` | 全站抽樣 | X-01~06 | | FE↔BE | `apps/web/tests/integration/**` | vitest 或 playwright + `LIVE_API_BASE` | live repo 契約(非 mock) | ## 3. Case 命名(強制) - Go:`TestAU_01_LoginSuccess`、`TestOB_02_DueStep_PublishedViaTransport` - JS:`it('AU-04 me returns numeric uid via live repo')` - 必須能被 `grep -E 'AU-01|TestAU_01'` 從測試樹找到 - 最終由 `T222` / `acceptance-matrix.md` + check script 機械對齊 **184** 列 ## 4. 外部依賴 | 依賴 | 自動化 | 不可做 | |------|--------|--------| | Threads OAuth/Publish | **fake HTTP server** 注入 | 只 `UpdateOne` 成 connected/published | | AI / Exa | fake transport | 假成功空 data | | 真 Meta/真 xAI | 矩陣標 `manual`/可選 live | 取代 auto case | ## 5. 指令(目標形狀;M0 T108 落地) ```bash # 後端 cd apps/backend make test # go test ./... make gen-api # 改 .api 後 # 前端 FE-BE(T220) cd apps/web LIVE_API_BASE=http://127.0.0.1:8888 npm run test:integration # 煙測(T218) bash scripts/smoke-p0.sh ``` ## 6. 里程碑閘門 | M 完成定義 | 除功能外必須 | |------------|--------------| | M0 | T107 testkit + T108 CI targets | | M1 | T119 綠(AU/AR/AP/AO/AD) | | M2 | T136 綠(TH/JB) | | M3 | T156 綠(ST/USG) | | M4 | T172 綠(PE/PL/OB/OP) | | M5 | T196 綠(IN/SC) | | M6 | T219–T222 綠;矩陣 184 齊 | ## 7. 與 mock 前端的關係 - `createRepos('mock')` 的單元測 **不** 計 §9 live 驗收。 - live 驗收以 gateway + worker + `createRepos('live')` 為準。