邱敬幃 Pardn Chiu
目錄單元測試什麼是單元測試?為什麼要進行單元測試?如何進行單元測試?什麼是 Mocha?安裝 Mocha使用 Mocha 撰寫測試使用 Mocha 執行測試使用 Mochawesome 生成報告整合測試什麼是整合測試?為什麼要進行整合測試?如何進行整合測試?什麼是 Supertest?安裝 Supertest使用 Supertest 進行測試使用 Supertest 執行測試系列文章相關連結
標籤

Mocha?Supertest?單元與整合測試?

Node.js: JavaScript 的後端魔法 (10)

244次觀看 0收藏 後端開發 Nodejs
在軟體開發生命週期中,測試佔據了至關重要的地位,有助於確保代碼的正確性、可靠性和穩定性。
單元測試和整合測試是兩種關鍵的測試層級,它們在確保軟體品質方面發揮了關鍵作用。
本篇將會以 Mocha 與 Supertest 作為範例來深入討論。

單元測試

什麼是單元測試?

單元測試是對程式中最小的可測單元進行測試的過程。這個最小的可測單元通常是一個函數、方法或類的一個特定功能。單元測試的目的是確保每個單元的功能正確且獨立於其他部分。

為什麼要進行單元測試?

  • 快速反饋
    單元測試是開發過程中的一個快速反饋機制。開發者可以迅速知道他們所寫的代碼是否正確。
  • 維護代碼
    在後續的代碼修改中,單元測試確保現有的功能不會被破壞。這有助於代碼的長期維護。
  • 提高代碼品質
    通過測試邊界條件、邊界條件和異常情況,可以更好地理解代碼的行為,提高代碼的品質。

如何進行單元測試?

使用測試框架是進行單元測試的標準方式。對於 JavaScript/Node.js,Mocha、Jest 和 Jasmine 是一些常見的測試框架。以下會深入討論 Mocha 以及如何使用:

什麼是 Mocha?

Mocha 是一個廣泛使用的 JavaScript 測試框架。它提供了豐富的功能,包括支持異步測試、多種報告格式、易於擴展的插件等。適用於單元測試和整合測試。透過撰寫清晰的測試和使用 Mocha 提供的功能,我們可以確保代碼的正確性並迅速發現潛在的問題。以下將深入介紹如何使用 Mocha 進行單元測試。

安裝 Mocha

使用以下命令安裝 Mocha

  1. npm install --save-dev mocha

上述命令將 Mocha 安裝為開發依賴,這樣我們就可以在開發過程中使用它。

使用 Mocha 撰寫測試

接下來創建一個 test.js 並開始編寫測試。以下是一個簡單的 Mocha 測試範例:

  1. const assert = require("assert");
  2. // 要測試的函數
  3. function add(a, b) {
  4.     return a + b;
  5. };
  6. // 測試套件
  7. describe("加法函數", function() {
  8.     // 單元測試
  9.     it("正確相加兩個數字", function() {
  10.         assert.equal(add(2, 3), 5);
  11.     });
  12.     it("處理負數", function() {
  13.         assert.equal(add(-1, 1), 0);
  14.     });
  15. });

在這個例子中,我們使用 describe 函數定義一個測試套件,其中包含兩個單元測試使用 it 函數。 assert.equal 用於斷言測試的期望結果。

使用 Mocha 執行測試

編寫完 test.js 後,使用以下命令在命令行中執行 Mocha 測試:

  1. npx mocha test.js

Mocha 將運行測試並提供相應的輸出。如果所有測試通過,我們應該看到一個 符號,表示一切正常。如果有測試失敗,Mocha 將詳細顯示失敗的測試用例。

使用 Mochawesome 生成報告

Mocha 提供了許多選項,例如指定測試目錄、選擇報告格式等。我們可以通過查看 Mocha 的官方文檔以了解更多信息。如果我們想要生成更漂亮的報告,可以安裝 mochawesome:

  1. npm install --save-dev mochawesome

然後,我們可以使用以下命令運行測試並生成報告:

  1. npx mocha --reporter mochawesome test.js

這將生成一個 mochawesome-report 目錄,其中包含漂亮的 HTML 報告。


整合測試

什麼是整合測試?

整合測試是用於驗證應用程式中多個組件(函數、模組、服務等)協同工作的測試層級。整合測試的目標是確保這些組件在一起運作時沒有問題。

為什麼要進行整合測試?

  • 確保系統整體正確性
    通過測試組件之間的交互作用,確保整體系統的正確性和穩定性。
  • 發現集成問題
    整合測試有助於發現不同組件之間可能存在的集成問題,例如接口不匹配或數據流錯誤。
  • 確保功能完整性
    確保不同組件之間的協同工作不會妨礙應用程式的功能完整性。

如何進行整合測試?

整合測試通常需要模擬或實際訪問應用程式中的多個組件。對於 Web 應用程式,可以使用 Supertest、Selenium 或 Puppeteer 進行端到端的整合測試。以下是一個使用 Supertest 的整合測試範例:

什麼是 Supertest?

Supertest 是一個廣泛用於測試 Node.js HTTP 服務器的測試庫。它提供了一個簡單而強大的 API,使我們能夠輕鬆模擬 HTTP 請求,測試應用程式的端點。以下是一個使用 Supertest 的簡單例子。

安裝 Supertest

使用以下命令安裝 Supertest

  1. npm install --save-dev supertest
使用 Supertest 進行測試

假設我們有一個簡單的 Express 應用程式,例如 app.js

現在,我們可以使用 Supertest 來測試這個應用程式。創建一個測試文件 test.js,並編寫以下測試:

  1. const request = require("supertest");
  2. const assert = require("assert");
  3. const app = require("./app");
  4. describe("整合測試", function() {
  5.     it("返回正確", function(done) {
  6.         request(app)
  7.         .get('/')
  8.         .expect(200)
  9.         // 期望值類型
  10.         .expect("Content-Type", /json/)
  11.         .end(function(err, res) {
  12.             if (err) return done(err);
  13.             // 期望結果
  14.             const result = { ?? : ?? };
  15.             assert.deepEqual(res.body, result);
  16.             done();
  17.         });
  18.     });
  19. });

在這個例子中,我們使用 Mocha 測試框架和 Node.js 的內建assert模塊。Supertest 提供的request函數用於創建一個測試對象,然後我們連續使用expect函數來設置各種期望值。最後,使用end函數執行測試。

使用 Supertest 執行測試

執行測試與先前的 Mocha 單元測試類似。在命令行中執行:

  1. npx mocha test.js

如果一切正常,則會看到通過的測試用例。

Supertest 提供了更多進階的功能,例如處理身分驗證、設置請求標頭、傳遞參數等。你可以查閱 Supertest 的官方文檔 以深入了解這些功能。


系列文章


相關連結