跳至主要内容

【Unit Test】測試分類及前端測試工具介紹

在開發時,最怕的就是遇到修這個壞那個,很常會不太敢亂動或重構程式碼,寫起來也會綁手綁腳的。剛好最近公司在試著推測試,所以也就開啟了這個 Unit Test 的新分類。

測試的分類

測試可以分為三種:

  • 單元測試(Unit test):針對程式中的最小可測試單位進行的測試,例如:函式邏輯測試。
  • 整合測試(Integration test):針對多個組件或模組之間的互動和整合的測試,例如:測試點擊按鈕顯示對話框。
  • 端對端測試(End-to-End test):模擬真實使用者情境,測試整個應用程式的功能和流程,例如:測試使用者註冊流程。

也就是我們常看到的測試金字塔:



可以從這個圖看到,當測試越靠近單元測試,測試的速度越快,測試的成本也越低,但是測試的範圍也越小。反之,當測試越靠近端對端測試,測試的速度越慢,測試的成本也越高,但是測試的範圍也越大。

而大部分的公司會是相反的測試冰淇淋,也就是花大量的時間在進行使用者測試,因為越貼近使用者的測試,越能確保使用者的體驗,不過就會需要花費更多的時間和成本,更不用說大部分的 E2E 測試都是人工測試,除了要花人力在撰寫各種測試腳本或是截圖,一旦有了新功能也不可能每次都要人工測試一遍。

測試工具

以前端來說,不管是 React、Vue、Angular,核心都是 JavaScript,所以共通的測試套件都是以 JavaScript 為主,先來看一下常見的單元測試工具在 npm trend 的比較:



可以看到,目前最熱門的測試工具是 Jest,也是我目前比較常用的測試套件。值得注意的是最近 Vite 所出的 Vitest 可能有望成為新一代熱門套件,除了測試速度更快以外,語法上也與 Jest 類似,可以持續關注!

這邊簡單做一個比較:

libraryJestMochaKarmaVitest
發布日期/版本2014/0.1.02011/0.1.02012/0.1.02020/0.1.0
開發公司/人FBopen sourceGoogleVite
是否含斷言❌ 搭配 chi❌ 搭配 Jasmine✅ 內建 chi 及 jest 混合
是否含 mock fn❌ 搭配 Sinon.js❌ 搭配 Sinon.js
跑測試速度2341
優點內建斷言庫、mock fn、snapshot、覆蓋率、快速搭配 chi 斷言庫、mock fn、覆蓋率、快速內建斷言庫、mock fn、覆蓋率、快速vite 開發、快速、覆蓋率、快速
  • 斷言:判斷輸入是否符合預期, example: expect(1+1).toBe(2)
  • mock fn: 模擬函式, example: jest.fn()
  • snapshot: 比對輸出是否符合預期, example: expect(<div>123</div>).toMatchSnapshot()

Unit Test vs Integration Test



這一系列都會著重在 React 的測試筆記,如果有興趣可以持續關注!

參考資料

Unit Test vs Integration Test