Karmaは、プロジェクトをテストするためにプロジェクトに関する情報を必要とします。この情報は設定ファイルを通じて提供されます。初期設定ファイルを作成する最も簡単な方法は、`karma init`コマンドを使用することです。このページでは、利用可能なすべての設定オプションをリストアップしています。
Karmaの設定ファイルは、JavaScript、CoffeeScript、またはTypeScriptで記述でき、通常のNode.jsモジュールとしてロードされます。
引数として指定されていない場合、Karma CLIは次の順序で設定ファイルを探します。
./karma.conf.js
./karma.conf.coffee
./karma.conf.ts
./.config/karma.conf.js
./.config/karma.conf.coffee
./.config/karma.conf.ts
この順序で。
設定ファイル内では、設定コードは、1つの引数(設定オブジェクト)を受け取る関数に`module.exports`をポイントさせることで構成されます。
// karma.conf.js
module.exports = function(config) {
config.set({
basePath: '../..',
frameworks: ['jasmine'],
//...
});
};
# karma.conf.coffee
module.exports = (config) ->
config.set
basePath: '../..'
frameworks: ['jasmine']
# ...
// karma.conf.ts
module.exports = (config) => {
config.set({
basePath: '../..',
frameworks: ['jasmine'],
//...
});
}
あるいは、(v6.3以降)`async`関数を使用することもできます。
// karma.conf.js
module.exports = async (config) => {
const karmaConfig = await getKarmaConfig("dev");
config.set({
...karmaConfig
});
};
Karmaは内部的にts-nodeを使用してTypeScriptをJavaScriptにトランスパイルします。解決された`tsconfig.json`で`module`が`ES`形式として設定されている場合、「`SyntaxError: Unexpected token`」のようなエラーが発生する可能性があります。これは、Nodeでは`ES`モジュール形式がサポートされていないためです。この問題を解決するには、ts-nodeで`commonjs`モジュール形式を使用するように設定する必要があります。
モジュール形式を上書きするJavaScript設定ファイルを作成します。
// karma.conf.js
require('ts-node').register({
compilerOptions: {
module: 'commonjs'
}
});
require('./karma.conf.ts');
ファイルパスを指定する設定オプションはすべて、柔軟で簡潔なファイル式を容易にするminimatchライブラリを使用しているため、含めるファイルと除外するファイルを簡単にリストできます。
各設定オプションの詳細については、以下のセクションを参照してください。以下のオプションはminimatch式を使用します。
exclude
files
preprocessors
例
利用可能な設定オプションは次のとおりです。
型: ブール値
デフォルト: `true`
CLI: `--auto-watch`, `--no-auto-watch`
説明: ファイルの監視と、これらのファイルのいずれかが変更された場合のテスト実行を有効または無効にします。
型: 数値
デフォルト: `250`
説明: Karmaはファイルの変更を監視する際に、複数の変更を一括処理して、テストランナーがテストの実行を開始および再開する回数を必要以上に増やしたり、ビルドファイルの状態が矛盾している間に再開したりしないようにします。この設定は、最後のファイル変更からテストプロセスを再開するまで待機する時間(ミリ秒)をKarmaに指示します。ファイルが変更されるたびにタイマーがリセットされます(つまり、デバウンス)。
型: 文字列
デフォルト: ``
説明: `files`と`exclude`で定義されているすべての相対パスを解決するために使用されるルートパス位置。`basePath`設定が相対パスである場合、設定ファイルの`__dirname`に解決されます。
型: 数値
デフォルト: `2000`
説明: ブラウザが再接続するまでKarmaが待機する時間(ミリ秒)。
接続が不安定な場合、ブラウザが切断されることはよくあることですが、実際のテスト実行は問題なく実行されている場合があります。Karmaは切断を直ちに失敗と見なすわけではなく、`browserDisconnectTimeout`(ミリ秒)待機します。その間にブラウザが再接続すれば、すべて正常です。
型: オブジェクト
デフォルト: `{level: "debug", format: "%b %T: %m", terminal: true}`
説明: 以下のプロパティを使用してブラウザコンソールのログ出力方法を設定します。これらはすべてオプションです。
{
level: string,
format: string,
path: string,
terminal: boolean
}
ここで`level`は目的のログレベルであり、`log`レベルは常にログに出力されます。`format`は文字列で、`%b`、`%t`、`%T`、`%m`はそれぞれブラウザ文字列、小文字のログタイプ、大文字のログタイプ、ログメッセージに置き換えられます。この形式は出力ファイルにのみ影響します。`path`は出力ファイルの出力パスであり、`terminal`はログをターミナルに出力するかどうかを示します。
型: 数値
デフォルト: `0`
説明:許容される切断回数。
`disconnectTolerance`値は、切断の場合にブラウザが試行する最大試行回数を表します。通常、切断は失敗と見なされますが、このオプションを使用すると、Karmaサーバーとブラウザ間のネットワークリンクが不安定な場合に許容レベルを定義できます。
型: 数値
デフォルト: `30000`
説明: ブラウザからのメッセージを待つKarmaの待機時間(ミリ秒)。
テスト実行中に、Karmaが`browserNoActivityTimeout`(ミリ秒)以内にブラウザからメッセージを受信しない場合、ブラウザとの接続を切断します。デフォルト値は、Travisが推奨する値です(https://docs.travis-ci.com/user/gui-and-headless-browsers/#karma-and-firefox-inactivity-timeouts)。
型: 配列
デフォルト: `[]`
CLI: `--browsers Chrome,Firefox`, `--no-browsers`
可能な値
説明:起動してキャプチャするブラウザのリスト。Karmaが起動すると、この設定に配置されている各ブラウザも起動されます。Karmaがシャットダウンされると、これらのブラウザもシャットダウンされます。KarmaのWebサーバーがリスニングしているURL(デフォルトは`http://localhost:9876/`)にアクセスして、ブラウザを手動でキャプチャできます。
config/browsersで詳細情報をご覧ください。追加のランチャはプラグインで定義できます。`--no-browsers`コマンドラインオプションを使用して、設定ファイルで指定されたこの設定の値を空のリストで上書きできます。
型: 数値
デフォルト: `60000`
説明: ブラウザのキャプチャのタイムアウト(ミリ秒)。
`captureTimeout`値は、ブラウザが起動してKarmaに接続するまでに許可される最大起動時間を表します。タイムアウト内にブラウザがキャプチャされない場合、Karmaはブラウザを強制終了して再起動を試みます。そして、3回キャプチャを試行しても失敗した場合、Karmaは諦めます。
型: 配列
デフォルト: `undefined`
CLI: `--`の後のすべての引数(`karma run`を使用する場合のみ)
説明: `karma run`にコマンドラインで追加の引数が渡されると、それらは`karma.config.args`(文字列の配列)としてテストアダプタに渡されます。`client.args`オプションを使用すると、`run`以外の操作に対してこの値を設定できます。
この値の使用方法については、テストアダプタによって異なります。アダプタのドキュメントで、この値の使用方法(および使用方法があるかどうか)を確認する必要があります。
型: ブール値
デフォルト: `true`
説明: テストをiFrame内または新しいウィンドウで実行します。
trueの場合、KarmaはテストをiFrame内で実行します。falseの場合、Karmaはテストを新しいウィンドウで実行します。一部のテストはiFrameでは実行されず、実行するには新しいウィンドウが必要な場合があります。
型: ブール値
デフォルト: `false`
説明: iFrameや新しいウィンドウを使用せずに、クライアントと同じウィンドウでテストを実行します。
trueの場合、KarmaはiFrameを使用せずに元のウィンドウ内でテストを実行します。テストスクリプトは動的にロードされます。
型: ブール値
デフォルト: `true`
説明: すべてのコンソール出力をキャプチャしてターミナルにパイプします。
型: ブール値
デフォルト: `true`
説明: コンテキストウィンドウをクリアします。
trueの場合、Karmaはテストの実行が完了するとコンテキストウィンドウをクリアします。falseの場合、Karmaはテストの実行が完了してもコンテキストウィンドウをクリアしません。falseに設定すると、Jasmine Spec Runnerテンプレートを埋め込む際に便利です。
型: ブール値
デフォルト: `false`
説明: クライアント要素にstyle display noneを設定します。
trueの場合、Karmaはバナーとブラウザリストを表示しません。スクリーンショットを含むコンポーネントテストでKarmaを使用する場合に便利です。
型: 配列
デフォルト: ['^https?://']
説明: return_url
クエリパラメータに対して許可される正規表現の文字列表現を定義します。
return_url
クエリパラメータの値がこの配列の各要素の文字列表現から導出された正規表現のいずれにも一致しない場合、その場所へのナビゲーションはブロックされます。
型: ブール値
デフォルト: `true`
CLI: --colors
, --no-colors
説明: 出力(レポーターとログ)の色表示を有効または無効にします。
型: 数値
デフォルト: Infinity
説明: Karmaが並列に起動するブラウザの数。
SauceLabsやBrowserstackなどのサービスでは、一度に起動するブラウザ数を制限し、それらが終了してからさらに起動することが理にかなっています。この設定を使用すると、一度に実行するブラウザの数を指定できます。
型: ブール値
デフォルト: `true`
説明: trueの場合、生成されたスクリプトタグにcrossorigin属性が追加されます。これにより、異なるオリジンから提供されるJavaScriptファイルのエラーレポートが向上します。必要なAccess-Control-Allow-Origin
ヘッダーなしで提供される外部スクリプトを読み込む必要がある場合は、これを無効にしてください。
型: string
デフォルト: null
説明: null
(デフォルト)の場合、Karma独自のcontext.html
ファイルを使用します。
型: string
デフォルト: null
説明: null
(デフォルト)の場合、Karma独自のdebug.html
ファイルを使用します。
型: string
デフォルト: null
説明: null
(デフォルト)の場合、Karma独自のclient_with_context.html
ファイルを使用します(client.runInParentをtrueに設定した場合に使用されます)。
型: 配列
デフォルト: `undefined`
説明: KarmaのWebサーバーがファイルを配信する際に設定されるカスタムHTTPヘッダー。カスタムヘッダーは、特にService Workersのような最新のブラウザ機能を使用する場合に役立ちます。
customHeaders
オプションを使用すると、正規表現に一致するファイルのHTTPヘッダーを設定できます。customHeaders
は、以下のプロパティを持つObject
の配列です。
例
customHeaders: [{
match: '.*foo.html',
name: 'Service-Worker-Allowed',
value: '/'
}]
型: ブール値
デフォルト: `false`
CLI: --detached
説明: trueの場合、Karmaサーバーを別のプロセスで起動し、コンソールに出力を書き込みません。サーバーはkarma stop
コマンドを使用して停止できます。
型: 配列
デフォルト: `[]`
説明: 読み込まれるファイルから除外するファイル/パターンのリスト。
型: ブール値
デフォルト: `true`
CLI: --fail-on-empty-test-suite
, --no-fail-on-empty-test-suite
説明: 空のテストスイートの実行時の失敗を有効または無効にします。無効にすると、プログラムは終了コード0
を返し、警告を表示します。
型: ブール値
デフォルト: `false`
CLI: --fail-on-skipped-tests
, --no-fail-on-skipped-tests
説明: 意図的に無効化されたテスト(例:jasmineのfit()またはxit()テスト)での失敗を有効または無効にします。これを使用して、本番環境の検証に必要なテストが誤って無効化されるのを防ぎます。
型: ブール値
デフォルト: `true`
CLI: --fail-on-failing-test-suite
, --no-fail-on-failing-test-suite
説明: テストの失敗時の失敗を有効または無効にします。
型: 配列
デフォルト: `[]`
説明: ブラウザで読み込むファイル/パターンのリスト。
詳細はconfig/filesを参照してください。
型: ブール値
デフォルト: `false`
説明: socket.ioにXHRポーリングの代わりにJSONPポーリングを使用するように強制します。
型: 配列
デフォルト: `[]`
説明: 使用するテストフレームワークのリスト。通常は['jasmine']
、['mocha']
、['qunit']
などに設定します。
Karmaのほぼすべてのフレームワークでは、追加のプラグイン/フレームワークライブラリを(npm経由で)インストールする必要があります。
詳細はpluginsを参照してください。
型: 文字列
デフォルト: '0.0.0.0' or LISTEN_ADDR
説明: サーバーがリスンするアドレス。ループバックのみをリスンするには'localhost'に変更し、すべてのIPv6インターフェースをリスンするには'::'に変更します。
型: 文字列
デフォルト: 'localhost'
説明: ブラウザのキャプチャ時に使用するホスト名。
型: オブジェクト
デフォルト: {}
説明: Nodeのhttps
クラスで使用されるオプションオブジェクト。
オブジェクトの説明はNodeJS.org APIドキュメントを参照してください。
例
httpsServerOptions: {
key: fs.readFileSync('server.key', 'utf8'),
cert: fs.readFileSync('server.crt', 'utf8')
},
型: 定数
デフォルト: config.LOG_INFO
CLI: --log-level debug
可能な値
config.LOG_DISABLE
config.LOG_ERROR
config.LOG_WARN
config.LOG_INFO
config.LOG_DEBUG
説明: ログレベル。
型: 配列
デフォルト: [{type: 'console'}]
説明: 使用するログアペンダーのリスト。log4jsのドキュメントを参照してください。
型: 配列
デフォルト: `[]`
説明: Karmaサーバーが使用する追加のミドルウェアの名前のリスト。ミドルウェアはリストされた順序で使用されます。
プラグイン/フレームワーク(インラインまたはnpm経由)でミドルウェアをインストールする必要があります。詳細はpluginsを参照してください。
プラグインはexpress/connectミドルウェア関数を提供する必要があります(詳細はExpressドキュメントを参照)。カスタムインラインミドルウェアの例を以下に示します。
例
function CustomMiddlewareFactory (config) {
return function (request, response, /* next */) {
response.writeHead(200)
return response.end("content!")
}
}
middleware: ['custom']
plugins: [
{'middleware:custom': ['factory', CustomMiddlewareFactory]}
...
]
型: オブジェクト
デフォルト: {}
説明: ファイル拡張子からMIMEタイプへのデフォルトのマッピングを再定義します。
プロパティ名に必要なMIMEを設定し、その値として拡張子の配列(ドットなし)を指定します。
例
mime: {
'text/x-typescript': ['ts','tsx']
'text/plain' : ['mytxt']
}
型: 配列
デフォルト: `[]`
説明: middlewareと同じですが、これらのミドルウェアはKarma独自のミドルウェアの前に実行されます。
型: 配列
デフォルト: ['karma-*']
説明: 読み込むプラグインのリスト。プラグインは、プラグインオブジェクト、またはプラグインオブジェクトをエクスポートするモジュールの名前を含む文字列のいずれかです。pluginsで、プラグインのインストールと使用方法の詳細を参照してください。
デフォルトでは、Karmaは名前がkarma-*
で始まるすべての兄弟npmパッケージからプラグインを読み込みます。
型: 数値
デフォルト: 9876
CLI: --port 9876
説明: Webサーバーがリスンするポート。
定義されたポートが既に使用されている場合、Karmaは自動的に値を1ずつ増やし、空いているポートが見つかるまで続けます。
型: 数値
デフォルト: `2000`
説明: ブラウザのプロセスが終了するのを待つ時間(ミリ秒)。
テスト実行後、またはKarmaがブラウザの終了を試みた後、processKillTimeout
(ミリ秒)内にブラウザが終了しない場合、KarmaはSIGKILLシグナルを送信してブラウザを強制的に終了しようとします。
型: オブジェクト
デフォルト: {'**/*.coffee': 'coffee'}
説明: 使用するプリプロセッサのマップ。
プリプロセッサはpluginsを介して読み込むことができます。
プリプロセッサは、実行時に使用可能なファイルとファイルタイプを変換する場合があります。「coverage」プリプロセッサをソースファイルで使用している場合、テストを対話的にデバッグしようとすると、予期したソースコードが完全に変更されていることがわかります。そのため、自動化されたビルドでは「reporters」リストのcoverageエントリを使用し、対話的なデバッグでは使用しないように設計する必要があります。
詳細はこちらをクリックしてください。
型: 文字列
デフォルト: 'http:'
可能な値
http
https
説明: Karma Webサーバーの実行に使用されるプロトコル。
Nodeのhttp
またはhttps
クラスの使用を決定します。
'https:'
を使用するには、httpsServerOptions
を指定する必要があります。型: 文字列
デフォルト: `undefined`
説明: Karma Webサーバーに使用されるモジュール。
Nodeの組み込みhttp
またはhttps
モジュールの代わりに、指定されたモジュールを使用します。ここで読み込まれるモジュールは、Nodeのhttpモジュールのインターフェースと完全に一致する必要があります。これは、node-http2
のようなモジュールを読み込んでhttp2サポートを有効にするのに役立ちます。
http2
を有効にするためにこれを使用する場合は、protocol
をhttps:
に設定し、http2はhttpsでのみ実行できるため、証明書を指定する必要があります。型: オブジェクト
デフォルト: {}
説明: パスとプロキシのペアのマップ。
プロキシは、ターゲットURLまたはパスで直接指定するか、より多くのオプションを設定するオブジェクトで指定できます。使用可能なオプションは次のとおりです。
target
ターゲットURLまたはパス(必須)changeOrigin
プロキシがターゲットのホストを使用してHostヘッダーを上書きするかどうか(デフォルトfalse
)例
proxies: {
'/static': 'http://gstatic.com',
'/web': 'http://localhost:9000',
'/img/': '/base/test/images/',
'/proxyfied': {
'target': 'http://myserver.localhost',
'changeOrigin': true
}
},
型: ブール値
デフォルト: `true`
説明: 無効なSSL証明書が見つかった場合に、Karmaまたはブラウザがエラーを発生させるかどうか。
型: 数値
デフォルト: `0`
説明: Karmaは、指定された時間制限(ミリ秒)よりも遅いすべてのテストを報告します。デフォルトでは無効になっています(デフォルト値は0)。
型: 配列
デフォルト: ['progress']
CLI: --reporters progress,growl
可能な値
dots
progress
説明: 使用するレポーターのリスト。
growl
、junit
、teamcity
、coverage
などの追加レポーターは、プラグインを通じて読み込むことができます。
型: 関数
デフォルト: `undefined`
CLI: --format-error ./path/to/formatFunction.js
引数
msg
- アサーションエラーとスタックトレースの1行(各行に対して呼び出されます)。戻り値: 新しいエラーメッセージ行。
説明: アサーションエラーとスタックトレースをフォーマットします。ベンダーやコンパイル済みソースを除去するのに役立ちます。空行''
を返すことで行を除去できます。
CLIオプションは、フォーマット関数をエクスポートするファイルへのパスである必要があります。これは、モジュールのルートでエクスポートされた関数、またはformatError
という名前でエクスポートされた関数です。
型 数値
デフォルト 5000
説明 Socket.io pingTimeout(ミリ秒単位)、https://socketio.dokyumento.jp/docs/server-api/#new-Server-httpServer-options。非常に遅いネットワークでは、最大60000の値が必要になる場合があります。値を大きくすると、テストのデッドロックやブラウザのクラッシュの検出が遅れる可能性があります。
型: ブール値
デフォルト: `false`
説明: Karmaがファイルの変更を監視している場合、現在の実行が完了するまで新しい実行を遅延させます。この設定を有効にすると、変更が検出されたときに現在の実行がキャンセルされ、新しい実行がすぐに開始されます。
型: 数値
デフォルト 2
説明: ブラウザがクラッシュした場合、Karmaは再起動を試みます。これは、Karmaが諦める前にブラウザを再起動する回数を定義します。
型: ブール値
デフォルト: `false`
CLI: --single-run
、--no-single-run
説明: 連続インテグレーションモード。
true
の場合、Karmaはすべての設定されたブラウザを起動して取得し、テストを実行してから、すべてのテストがパスしたか、テストに失敗したかによって、終了コード0
または1
で終了します。
型: 配列
デフォルト: ['polling', 'websocket']
説明: ブラウザとテストサーバー間の許可された転送方法の配列。この設定はsocket.io(ブラウザとテストサーバー間の通信を管理します)に渡されます。
型: 関数
デフォルト: `undefined`
説明: プロキシをリクエストするときに呼び出されます。
これに関する詳細は、node-http-proxyを参照してください。HTTPヘッダーを上書きする例を以下に示します。
例
proxyReq: function(proxyReq, req, res, options) {
proxyReq.setHeader('Referer', 'https://www.example.com/');
}
型: 関数
デフォルト: `undefined`
説明: プロキシに応答するときに呼び出されます。
これに関する詳細は、node-http-proxyを参照してください。HTTPヘッダーを上書きする例を以下に示します。
例
proxyRes: function(proxyRes, req, res) {
if (proxyRes.headers['set-cookie']) {
proxyRes.headers['set-cookie'] = proxyRes.headers['set-cookie'].map(function (cookie) {
return cookie.replace(/\s*secure;?/i, '');
})
}
}
型: オブジェクト
デフォルト: `undefined`
説明: Karmaサーバーを、ベースURLなどを変更するプロキシの背後で実行する必要がある場合に使用します。
設定されている場合、以下のフィールドが定義され、上書きできます。
型: 文字列
デフォルト: '/'
説明: ブラウザを起動するときにベースURLの前に追加され、ブラウザによって読み込まれた内部URLの前に追加されます。
型: 数値
デフォルト: 9875
説明: ブラウザを起動するときにポートとして使用されます。
型: 文字列
デフォルト: 'localhost'
説明: ブラウザを起動するときにホスト名として使用されます。
型: 文字列
デフォルト: 'http:'
説明: ブラウザを起動するときにプロトコルとして使用されます。
型: 文字列
デフォルト: '/'
説明: Karmaが実行されるベースURL。
KarmaのすべてのURLはurlRoot
で接頭辞が付けられます。これはプロキシを使用する場合に役立ちます。Karmaですでに使用されているURLをプロキシしたい場合があるためです。
型: 数値
デフォルト: 20000
説明: クライアントソケット接続のタイムアウト(ミリ秒単位)。
この設定は、クライアントがソケットの接続を待つ時間を表します。
異なる環境でブラウザを実行する場合、クライアントソケットの接続には異なる時間がかかる場合があります。Karmaがデフォルトのタイムアウト内で接続できない場合、次のようなエラーが表示される可能性があります。
ChromeHeadless has not captured in 60000ms, killing.
Trying to start ChromeHeadless again (1/2).
ChromeHeadless has not captured in 60000ms, killing.
Trying to start ChromeHeadless again (2/2).
ChromeHeadless has not captured in 60000ms, killing.
ChromeHeadless failed 2 times(timeout). Giving up.
このエラーが表示された場合は、ソケット接続のタイムアウトを増やすことができます。