在軟體開發生命週期中,測試佔據了至關重要的地位,有助於確保代碼的正確性、可靠性和穩定性。
單元測試和整合測試是兩種關鍵的測試層級,它們在確保軟體品質方面發揮了關鍵作用。
本篇將會以 Mocha 與 Supertest 作為範例來深入討論。
單元測試是對程式中最小的可測單元進行測試的過程。這個最小的可測單元通常是一個函數、方法或類的一個特定功能。單元測試的目的是確保每個單元的功能正確且獨立於其他部分。
使用測試框架是進行單元測試的標準方式。對於 JavaScript/Node.js,Mocha、Jest 和 Jasmine 是一些常見的測試框架。以下會深入討論 Mocha 以及如何使用:
Mocha 是一個廣泛使用的 JavaScript 測試框架。它提供了豐富的功能,包括支持異步測試、多種報告格式、易於擴展的插件等。適用於單元測試和整合測試。透過撰寫清晰的測試和使用 Mocha 提供的功能,我們可以確保代碼的正確性並迅速發現潛在的問題。以下將深入介紹如何使用 Mocha 進行單元測試。
使用以下命令安裝 Mocha
- npm install --save-dev mocha
上述命令將 Mocha 安裝為開發依賴,這樣我們就可以在開發過程中使用它。
接下來創建一個 test.js
並開始編寫測試。以下是一個簡單的 Mocha 測試範例:
- const assert = require("assert");
- // 要測試的函數
- function add(a, b) {
- return a + b;
- };
- // 測試套件
- describe("加法函數", function() {
- // 單元測試
- it("正確相加兩個數字", function() {
- assert.equal(add(2, 3), 5);
- });
- it("處理負數", function() {
- assert.equal(add(-1, 1), 0);
- });
- });
在這個例子中,我們使用 describe
函數定義一個測試套件,其中包含兩個單元測試使用 it
函數。 assert.equal
用於斷言測試的期望結果。
編寫完 test.js
後,使用以下命令在命令行中執行 Mocha 測試:
- npx mocha test.js
Mocha 將運行測試並提供相應的輸出。如果所有測試通過,我們應該看到一個 √
符號,表示一切正常。如果有測試失敗,Mocha 將詳細顯示失敗的測試用例。
Mocha 提供了許多選項,例如指定測試目錄、選擇報告格式等。我們可以通過查看 Mocha 的官方文檔以了解更多信息。如果我們想要生成更漂亮的報告,可以安裝 mochawesome
:
- npm install --save-dev mochawesome
然後,我們可以使用以下命令運行測試並生成報告:
- npx mocha --reporter mochawesome test.js
這將生成一個 mochawesome-report
目錄,其中包含漂亮的 HTML 報告。
整合測試是用於驗證應用程式中多個組件(函數、模組、服務等)協同工作的測試層級。整合測試的目標是確保這些組件在一起運作時沒有問題。
整合測試通常需要模擬或實際訪問應用程式中的多個組件。對於 Web 應用程式,可以使用 Supertest、Selenium 或 Puppeteer 進行端到端的整合測試。以下是一個使用 Supertest 的整合測試範例:
Supertest 是一個廣泛用於測試 Node.js HTTP 服務器的測試庫。它提供了一個簡單而強大的 API,使我們能夠輕鬆模擬 HTTP 請求,測試應用程式的端點。以下是一個使用 Supertest 的簡單例子。
使用以下命令安裝 Supertest
- npm install --save-dev supertest
假設我們有一個簡單的 Express 應用程式,例如 app.js
現在,我們可以使用 Supertest 來測試這個應用程式。創建一個測試文件 test.js
,並編寫以下測試:
- const request = require("supertest");
- const assert = require("assert");
- const app = require("./app");
- describe("整合測試", function() {
- it("返回正確", function(done) {
- request(app)
- .get('/')
- .expect(200)
- // 期望值類型
- .expect("Content-Type", /json/)
- .end(function(err, res) {
- if (err) return done(err);
- // 期望結果
- const result = { ?? : ?? };
- assert.deepEqual(res.body, result);
- done();
- });
- });
- });
在這個例子中,我們使用 Mocha 測試框架和 Node.js 的內建assert
模塊。Supertest 提供的request
函數用於創建一個測試對象,然後我們連續使用expect
函數來設置各種期望值。最後,使用end
函數執行測試。
執行測試與先前的 Mocha 單元測試類似。在命令行中執行:
- npx mocha test.js
如果一切正常,則會看到通過的測試用例。
Supertest 提供了更多進階的功能,例如處理身分驗證、設置請求標頭、傳遞參數等。你可以查閱 Supertest 的官方文檔 以深入了解這些功能。