動作概要

Karmaは基本的に、接続された各ブラウザに対してソースコードとテストコードを実行するWebサーバーを起動するツールです。各ブラウザに対する各テストの結果は検証され、開発者向けにコマンドラインに表示されます。これにより、どのブラウザとテストが成功または失敗したかが分かります。

ブラウザは、以下のいずれかの方法で接続できます。

  • 手動で、KarmaサーバーがリスンしているURL(通常は`http://localhost:9876/`)にアクセスします。
  • または、Karmaの実行時に起動するブラウザをKarmaに知らせることで自動的に接続します(ブラウザを参照)。

Karmaはまた、設定ファイルで指定されたすべてのファイルを監視し、ファイルに変更があると、テストサーバーに信号を送信して、キャプチャされたすべてのブラウザにテストコードを再実行するように指示することで、テスト実行をトリガーします。各ブラウザは、IFrame内でソースファイルを読み込み、テストを実行し、結果をサーバーに報告します。

サーバーは、キャプチャされたすべてのブラウザからの結果を収集し、開発者に提示します。

これは非常に簡単な概要に過ぎません。Karmaを使用する際に、Karmaの内部動作を完全に理解する必要はありません。

ワークフローの概要 #

Karmaの動作概要は以下のとおりです。

起動後、Karmaはプラグインと設定ファイルを読み込み、接続を待機するローカルWebサーバーを起動します。サーバーからのWebソケットを既に待機しているブラウザは、すぐに再接続します。プラグインの読み込みの一環として、テストレポーターは 'browser' イベントに登録され、テスト結果の準備が整います。

次に、Karmaは0個、1個、または複数のブラウザを起動し、開始ページをKarmaサーバーのURLに設定します。

ブラウザが接続されると、Karmaは 'client.html' ページを提供します。このページがブラウザで実行されると、Webソケットを介してサーバーに接続されます。

サーバーはWebソケット接続を確認すると、クライアントにテストを実行するよう指示します(Webソケット経由)。クライアントページは、サーバーからの 'context.html' ページを含むiframeを開きます。サーバーは、設定を使用してこのcontext.htmlページを生成します。このページには、テストフレームワークアダプター、テスト対象のコード、およびテストコードが含まれています。

ブラウザがこのコンテキストページを読み込むと、onloadイベントハンドラーがpostMessageを介してコンテキストページをクライアントページに接続します。この時点でフレームワークアダプターが担当します。テストを実行し、クライアントページを介してメッセージを送信することでエラーまたは成功を報告します。

クライアントページに送信されたメッセージは、Webソケットを介してKarmaサーバーに転送されます。サーバーはこれらのメッセージを 'browser' イベントとして再ディスパッチします。'browser' イベントをリッスンしているレポーターはデータを取得します。データの印刷、ファイルへの保存、または別のサービスへの転送を行うことができます。データはテストフレームワークアダプターからレポーターに送信されるため、アダプターとレポーターは、karma-jasmineとkarma-jasmine-reporterのように、ほぼ常にペアで提供されます。テスト結果データの詳細な内容は、Karmaの他の部分には関係ありません。レポーターだけがその形式を知る必要があります。

Karmaには多くのバリエーションとオプションがあり、設定によってワークフローが異なる場合があります。

設計の詳細に興味がある場合は、Karma自体は大学の卒業論文に由来しており、設計と実装について詳しく説明されています。論文はこちらで読むことができます。