01|Vitest 是什麼?為什麼要用它?
系列文章:從零學會 Vitest — 第 1 篇,共 8 篇
測試是什麼?為什麼要寫?
想像你剛寫好一個計算折扣的函式,你在瀏覽器上手動試了幾次,看起來沒問題,就推上去了。
結果三週後,同事改了某個地方,折扣突然算錯,而且沒有人發現,直到客訴進來……
這就是「沒有測試」的代價。
測試(Test)是一段程式碼,專門用來「確認你的程式有沒有照你預期的方式運作」。你寫好測試之後,每次改程式,只要跑一次測試,就能立刻知道有沒有東西壞掉。
你的程式碼 ──執行──▶ 測試 ──比對結果──▶ ✅ 通過 / ❌ 失敗
測試帶來的好處:
- 安心重構:改程式不用擔心不知道哪裡壞掉
- 活文件:測試本身就是「這段程式應該怎麼用」的說明書
- 快速除錯:測試失敗時,馬上知道哪個功能出了問題
認識 Vitest
Vitest 是一個現代化的 JavaScript / TypeScript 測試框架。
它由 Vite 團隊開發,專門為使用 Vite 作為建置工具的專案設計,但也可以用在一般的 Node.js 專案。
Vitest 的幾個特色
1. 速度非常快
Vitest 使用和 Vite 一樣的模組解析方式,不需要額外編譯,測試啟動和執行的速度都快很多。
2. 設定超簡單
如果你已經有 vite.config.ts,Vitest 幾乎不需要額外設定,直接就能用。
3. 語法和 Jest 幾乎一樣
如果你以前寫過 Jest,切換到 Vitest 非常容易,大部分的寫法都相同。
4. 原生支援 TypeScript 和 ESM
不需要額外安裝 Babel 或 ts-jest,直接支援現代語法。
5. 內建 UI 介面
可以開啟一個漂亮的網頁介面,讓你用視覺化方式看測試結果。
Vitest vs Jest:差在哪裡?
Jest 是目前最廣泛使用的 JavaScript 測試框架。Vitest 是後起之秀,你可能會想問:那我要用哪個?
| 比較項目 | Jest | Vitest |
|---|---|---|
| 誕生年份 | 2014 | 2022 |
| 開發團隊 | Meta(Facebook) | Vite 團隊 |
| 啟動速度 | 較慢 | 非常快 |
| Vite 專案整合 | 需要額外設定 | 幾乎零設定 |
| TypeScript 支援 | 需要 ts-jest | 原生支援 |
| ESM 支援 | 有問題,需設定 | 原生支援 |
| 語法相容性 | — | 大部分與 Jest 相容 |
| 生態系 | 非常成熟 | 快速成長中 |
結論:
- 新專案用 Vite?👉 選 Vitest,設定最省事
- 舊專案已經用 Jest?👉 可以繼續用,沒有非換不可
- 想試試看更快的測試體驗?👉 遷移到 Vitest 成本很低
測試有哪些種類?
在繼續之前,先認識三種常見的測試類型,之後學習時會一直看到這些名詞。
單元測試(Unit Test)
測試一個函式或一小段邏輯是否正確運作,不依賴外部系統。
測試對象:一個計算金額的函式
輸入:100(原價), 0.8(折扣)
預期輸出:80
這是最基礎、也最常見的測試類型。Vitest 最常用來做這種測試。
整合測試(Integration Test)
測試多個模組合作時,有沒有照預期運作。比如:資料庫存取 + 業務邏輯一起測。
端對端測試(E2E Test)
模擬真實使用者操作瀏覽器的流程,從頭到尾跑一遍。需要搭配 Playwright 或 Cypress 等工具。
本系列文章主要聚焦在單元測試,這是學習測試的最佳起點。
第一篇小結
- 測試讓你有信心改程式,不怕改壞東西
- Vitest 是現代、快速、對 Vite 友善的測試框架
- Vitest 語法和 Jest 幾乎一樣,容易上手
- 本系列從最基礎的單元測試開始學起
下一篇預告
👉 第 2 篇:環境安裝與第一個測試
我們會實際安裝 Vitest、設定好環境,並寫出你人生中第一個自動化測試,親眼看到 ✅ 通過的樣子。
本系列文章共 8 篇,適合 JavaScript / TypeScript 初學者。 如果你已經有 Vite 專案,可以直接從第 2 篇開始。