測試
此頁面向想了解我們為何測試、覆蓋率如何界定的讀者——不是即時的 CI 百分比看板。
為何現在要測試
JustHold 涉及資金計算、登入導向、資料列層級安全性(RLS),以及註冊、持倉等關鍵路徑。自動化測試在產品成長時抓住這些區域的回歸,讓部位邏輯與權限規則可靠,而不只依賴手動點擊。
測試層級
| 層級 | 位置 | 執行方式 | 用途 |
|---|---|---|---|
| 單元 | tests/unit/ | Vitest | lib/ 內純函式——不碰資料庫或網路 |
| 整合 | tests/integration/ | Vitest + 本機 Supabase | RLS、RPC、資料庫行為 |
| E2E | tests/e2e/ | Playwright | 關鍵使用流程(如註冊、持倉門檻) |
指令
pnpm test # 單元
pnpm test:watch # 單元,監聽模式
pnpm test:coverage # 單元 + 覆蓋率門檻(CI)
pnpm test:int # 整合(本機 Supabase)
pnpm test:e2e # Playwright(本機)
覆蓋率哲學
vitest.config.ts 的單元覆蓋率門檻只套用在一份精選的純模組清單(格式化、資金輔助、排序鍵等)。刻意維持清單精簡,數字才有意義。
- 在 include 清單內 — 追求扎實的單元覆蓋;CI 會強制門檻(例如該集合約 80% 行覆蓋)。
- 在 include 清單外 — 不是「被遺忘」。RSC 頁面、server actions、資料庫行為改由整合/E2E 涵蓋(或規劃中),而非單元門檻。
當某個純 lib/ 模組已充分測試,我們會把它的路徑加進 coverage.include,門檻才會誠實。
已知缺口(依類別)
這裡不列檔案級缺口清單——很快就過時。大致上,這些區域在單元層目前偏薄或尚未覆蓋:
- 多數 UI 與 RSC 頁面
- 管理後台 CMS 與內容工具
- 文件站本身
- 需要真實資料庫或瀏覽器的行為(優先用整合/E2E)
我們會持續強化純領域輔助函式,並在模組穩固後擴充 coverage.include。
維護者細節
日常撰寫規範在 agent skill justhold-testing。細節以該 skill 為準,避免在此重複所有慣例。