階段 7 · 確保品質(測試與檢查)
Unit Test 單元測試
針對單一函式、元件或小模組驗證行為是否正確。
先用一句話理解
針對單一函式、元件或小模組驗證行為是否正確。
打個比方
像先測每個零件,再組成整台機器。
什麼時候會遇到
計算邏輯、資料轉換、權限判斷、重要商業規則。
再往深一點看
Unit test 把一個函式或元件隔離出來、直接呼叫它、餵給它各種輸入,然後斷言輸出是否符合預期——整個過程不需要真的連資料庫或呼叫外部 API,因為外部依賴都被 mock 掉了。這是三種測試層次(unit、integration、e2e)中粒度最細的一層:你測的是「這個 calculateDiscount 函式在輸入 VIP 會員和 1000 元訂單時,是否正確回傳 100 元折扣」,而不是整條購物流程。因為 unit test 不涉及網路或資料庫,它跑得非常快,一個專案的幾百個 unit test 通常幾秒就能跑完,適合在開發途中隨時執行。Vitest 是目前搭配 Vite / Next.js 專案最常見的 unit test 框架,語法和 Jest 幾乎相同但速度更快。
舉個例子
你用 Vitest 寫一個 unit test,餵給 formatCurrency(1234.5, 'TWD') 這個函式,斷言它回傳 'NT$1,234'。再多測幾個邊界條件:0 元、負數、小數點三位——每個 case 都只需要幾行,而且完全不用開瀏覽器或連資料庫,push 前幾秒就能全部跑完。
常見誤解
- - 只測快樂路徑(正常輸入),沒有測 null、undefined、空字串、負數這些邊界條件,等到真實使用者輸入奇怪資料時才爆出 runtime 錯誤。
- - 把所有邏輯都寫在 React 元件裡,導致無法單獨測試核心計算——抽成純函式才容易 unit test,這也是「可測試性」要求程式碼有好結構的原因。
- - 用真實的資料庫連線或真實 API 呼叫做「unit test」,測試速度變慢、也變得不穩定(網路斷線就失敗),那其實已經是 integration test 了,應該分開管理。
相關名詞
相關服務
GitHub