前言
在開發專案的過程中,很重要的一個部份是測試。在開發時常常會遇到某次修改之後,原本正常的功能突然不能用了,透過單元測試可以確保每次修改後,沒有造成其他地方出問題。
Javascript 有許多單元測試框架,例如:mocha, Jest, Jasmine…等,這篇文章主要是使用 mocha 測試框架。此外,我們還需要斷言庫來幫助我們判斷測試結果是否符合預期,這裡我們使用 chai 斷言庫。另外還可以搭配 supertest 來測試 Node.js API, supertest 是一個提供輕量級的 HTTP Request 測試的套件,通常會用來測試 Node.js API.
接下來就記錄一下如何使用 mocha, chai 和 supertest 來做單元測試。
安裝套件
首先,要先安裝所需套件: mocha, chai, supertest
1 | $ npm install mocha chai supertest --save |
撰寫測試內容
先在專案目錄底下建立 test
目錄,將測試的內容都放在此目錄底下,再來建立 test_query.js
就可以來撰寫測試內容了。
語法簡介
describe()
: 描述測試的區塊,可以當作一個測試群組,區塊中可以執行多個測試。it()
: 每個測試的內容。before()
: 在所有測試開始前,會執行此區塊的內容。after()
: 在所有測試結束後,會執行此區塊的內容。beforeEach()
: 在每個測試開始前,會執行此區塊的內容。afterEach()
: 在每個測試結束後,會執行此區塊的內容。
範例
這裡的範例是做一些 API 的基本測試:
1 | const assert = require('chai').assert; |
一開始先 require modules, 其中還有 require app.js
, app.js
是 Epress.js entry point, 執行 mocha 測試後,會啟動 API server,並開始執行測試。
再來 const api = supertest('http://localhost:3000');
這部分是設定 API 路徑,使用 supertest 對 API 發出 request.
最後 describe()
區塊內容就是要測試的 case:
- 測試 API 是否正常運作,stauts code 須為 200
- 測試 API 回傳的結果,必須為 object 且包含指定的 key
這裡我們使用 chai 的 assert 來驗證結果是否符合,另外 chai 也有 expect/should 的方式,詳細用法可以參考官方說明文件。
執行測試
寫好測試內容,最後就是執行測試囉!
可以直接在家目錄底下執行 mocha
,或是把測試指令加到 package.json
:
1 | // package.json |
指令中加上 --exit
是因為有遇到測試結束後,測試程式沒有終止的情況,所以加上此參數來終止程式。
接著執行 npm test
就會自動執行 test/
底下的測試。
如果測試成功,會看到以下內容:
失敗的話就會出現:
這樣我們就完成了使用 mocha 來做測試囉!