Karma 本質上是一個工具,它會產生一個 Web 伺服器,針對每個連接的瀏覽器執行原始碼與測試程式碼。每個瀏覽器上每個測試的結果都會被檢查並透過命令列顯示給開發人員,以便他們可以看到哪些瀏覽器和測試通過或失敗。
瀏覽器可以透過以下方式捕獲:
https://127.0.0.1:9876/
),Karma 還會監控設定檔中指定的所有檔案,並且每當任何檔案發生更改時,它都會透過向測試伺服器發送信號來觸發測試執行,通知所有捕獲的瀏覽器再次執行測試程式碼。然後,每個瀏覽器都會將原始碼檔案載入到 IFrame 中,執行測試並將結果回報給伺服器。
伺服器會收集所有捕獲的瀏覽器的結果,並將其呈現給開發人員。
這只是一個非常簡短的概述,因為在使用 Karma 時,Karma 的內部运作方式並非完全必要。
以下是 Karma 的大致运作方式
啟動後,Karma 會載入插件和設定檔,然後啟動其本地 Web 伺服器,監聽連線。任何已經在等待來自伺服器的 websockets 的瀏覽器都會立即重新連線。作為載入插件的一部分,測試報告器會註冊「瀏覽器」事件,以便它們為測試結果做好準備。
然後,karma 會啟動零個、一個或多個瀏覽器,將其起始頁面設定為 Karma 伺服器 URL。
當瀏覽器連線時,Karma 會提供一個「client.html」頁面;當此頁面在瀏覽器中執行時,它會透過 websockets 連線回伺服器。
伺服器看到 websocket 連線後,就會透過 websocket 指示客戶端執行測試。客戶端頁面會使用伺服器上的「context.html」頁面開啟一個 iframe。伺服器使用設定產生此 context.html 頁面。此頁面包含測試框架適配器、要測試的程式碼和測試程式碼。
當瀏覽器載入此上下文頁面時,onload 事件處理程序會透過 postMessage 將上下文頁面連線到客戶端頁面。框架適配器此時負責:它會執行測試,透過客戶端頁面傳送訊息來報告錯誤或成功。
傳送到客戶端頁面的訊息會透過 websocket 轉發到 Karma 伺服器。伺服器會將這些訊息重新分派為「瀏覽器」事件。監聽「瀏覽器」事件的報告器會取得資料;它們可能會列印資料、將資料儲存到檔案中,或將資料轉發到其他服務。由於資料是由測試框架適配器傳送到報告器,因此適配器和報告器幾乎總是成對出現,例如 karma-jasmine 和 karma-jasmine-reporter。測試結果資料的詳細內容與 karma 的其他部分無關:只有報告器需要知道其格式。
Karma 有許多變化和選項,可能會導致不同的設定產生不同的工作流程。
如果您有興趣瞭解更多關於設計的資訊,Karma 本身源自一篇大學論文,該論文詳細介紹了設計和實作,您可以在此處閱讀。