javascript - Karma 與測試框架 Jasmine、Mocha、QUnit
幾個問題:
- Karma 和測試框架 X(Jasmine、Mocha、QUnit)之間有什麼關係?
- 在 Java 世界中,相當的框架是什麼?我認為 Jasmine、Mocha、QUnit 相當於 JUnit/TestNG。那 Karma 呢?
- 我可以在不使用 Karma 的情況下運行測試框架 X(例如 Jasmine)嗎?
- Karma 是用於單元測試還是整合/端對端測試?這個參考資料顯示是用於單元測試,然而這個說法是用於端對端測試。
答案#1
Karma 是一個瀏覽器測試執行器。
這個想法是瀏覽器本身並沒有原生概念來加載測試文件、運行它們並報告結果。Karma 所做的事情大致是:
- 啟動一個小型網頁伺服器來提供要測試的「客戶端」JavaScript 檔案 (1)
- 也提供帶有測試(或稱為 Specs)的「客戶端」JavaScript 檔案 (2)
- 提供一個自訂的網頁,該網頁將運行測試用的 JavaScript 代碼 (3)
- 啟動瀏覽器以載入此頁面 (4)
- 將測試結果報告給伺服器(5)
- Karma 然後可以把結果報告到文字檔、控制台、任何你的 CI 伺服器喜歡的地方,等等...
看每個部分:
(1) 這些檔案將是你實際的 js 檔案;你需要告訴 karma 如何載入它們。如果你使用 requirejs,有一個 karma 插件,並且需要一些配置。
(2) 這些測試可以使用各種 JavaScript 測試框架(Jasmine、QUnit、Mocha)撰寫;這是可以在瀏覽器中運行的 JS 代碼。
(3) 自訂網頁對每個測試框架會稍有不同;這就是為什麼 karma 針對不同框架有插件的原因。
(4) Karma 可以在多個瀏覽器中啟動頁面(FF、Chrome,或像 PhantomJs 這樣的無頭瀏覽器)。
(5) 向業報告再次取決於框架,並由業插件處理。
所以為了回答你的問題:
- 在 Java 中,大多數人使用 JUnit,它既是一個用來撰寫測試又能執行測試的框架,但它沒有區分測試運行環境與測試報告彙總環境的問題;Karma 將會是 JUnit 套件和 JUnit 測試運行器之間缺失的部分。
- 是的,你可以用「手動」完成 karma 所做的所有事情——選擇一個框架(jasmine、qunit、mocha)並按照指示操作。karma 的優勢在於,如果你使用標準設置,它能提供開箱即用的解決方案。
- Karma 可以用於單元測試(使用 jasmine/qunit/或其他測試框架)以及整合測試(將使用另一個 API,例如 webdriver,來操作瀏覽器)
答案#2
理解這個差異的一個更簡短的方法:
使用純 Jasmine/Mocha 進行測試的人很可能是在 Node 虛擬機器上運行所有代碼。
在現有選擇的框架上加入 Karma,將會使用其他瀏覽器的引擎運行你的測試套件。
透過這樣做,你可以獲得在瀏覽器環境中所得到的小額外功能。測試與 DOM 相關的程式碼會比較容易,但你也會放棄 Node 引擎所提供的額外資源(例如檔案系統/終端機存取)。
答案#3
設計 Karma 的那個人的論文在描述現有解決方案並進行比較時非常有資訊量,當然也描述了 Karma 本身
https://github.com/karma-runner/karma/blob/master/thesis.pdf
摘要:Karma 是一個測試執行器。它可以被 QUnit、Jasmine、Mocha 等使用。與其他測試執行器相比,Karma 有一些優勢,可以改善你的 TDD/BDD 開發週期。它會「監視」檔案,因此當你儲存更改時,Karma 會立即執行測試並回報結果,無需切換到 Web 瀏覽器來執行測試。
簡而言之,也許問題應該是 Karma 和 Jasmine 或 Mocha 或 QUnit?