web-dev-qa-db-ja.com

大きなJSアプリのテスト-複数のkarma.conf.jsファイルの回避

私はkarma + jasmine + phantomをヘッドレスJavascriptテストに使用しています。

私が抱えている問題は、テストしたい多くのJSモジュールで構成される非常に大きなアプリがあることです。 各ケースのカスタムモックと各ケースのカスタムインクルードが必要です。

karma.conf.jsを使用すると、含めるすべてのファイルのパターンで構成されるfiles配列のみが許可されます。これは、アプリが小さく、ファイルやモジュールが大量にある大きなアプリではない場合に最適です。

My solutionとりあえず-テストケースごとに複数のkarma.conf.jsファイルを作成します。しかし、非常に多くの設定ファイルがあることは大きな膨らみであり、1つの設定を変更したい場合(autoWatchなど)、これは本当に厄介ですすべての構成ファイルを変更します。

私のその他の解決策-karma.conf.jsの前にカスタムハンドラーを記述して、追加パラメーター(スペックファイルまたはフォルダーで、カルマをバイパスして構成ファイルを検索するのを回避する)を処理し、files配列を構築する動的に。

これで私が目にする問題は、カルマが1回だけ実行され、1つのテスト仕様を実行するように制限されることです...そしてカルマを変更する必要はありません

Gruntの使用も検討しましたが、複数のテストケースで機能させる方法が見つかりませんでした。

ちなみに、私の理想的な構造は次のようになります:

ファイルを持っている:

test/specs/category/unit1_spec.js
test/mocks/category/unit1_mock.js

設定ファイル:

files: [
  {
    'includes': [array_of_includes],
    'spec': 'spec_file'
  }
]

モックファイルは適切なモックディレクトリから自動的に取得されます。

karma start test/specs/categoryを実行すると、フォルダ内のすべてのテストケースが再帰的に実行されます。

tl; dr-大きなアプリを快適にテストしたい。

anyこのタスクを処理するための提案をいただければ幸いです。

29
lukas.pukenis

grunt-karma ニーズに理想的に聞こえます。

それはサブタスクが共通の構成を持つことを可能にするうらやましいマルチタスクであり、特定のサブタスクによってオーバーライドすることができます。

プラグインはKarma設定を単一のファイルに統合します。例えば:

karma: {
  options: {
    configFile: 'karma.conf.js',
    runnerPort: 9999,
    browsers: ['Chrome', 'Firefox']
  },
  category1: {
    files: ['app/js/category1/**/*.js', 'test/category1/*.js']
  },
  category2: {
    files: ['app/js/category2/**/*.js', 'test/category2/*.js']
  }
}
8
Eitan Peer

ENV変数を使用して、karma.conf.js内のファイルに引数を渡します。

files: [
  include1, include2, ..., includeN,
  process.env.JS_TESTS + "/*.js"
]

次に、カルマを次のように実行します。

JS_TESTS=test/category2 karma start karma.conf.js
16
syrnick

Karma構成ファイルでrequireステートメントを使用できます。

たとえば、karma構成ファイルで次のようにできます。

files: require('./karma.conf.files')

より完全な回答を求めて..このリンクから別の解決策を見つけました: https://groups.google.com/forum/#!topic/karma-users/uAf7TuVBmCQ

カルマ0.8で(現在の安定)

// shared_conf.js
module.exports = {
  port: 8080
};

// karma1.conf.js
var shared = require('./shared_conf.js');

port = shared.port;

karma 0.9(現在カナリアリリース):

// shared_conf.js
module.exports = function(karma) {
  karma.configure({
    port: 8080  
  });
};

// karma1.conf.js
var shared = require('./shared_conf.js');
module.exports = function(karma) {
  shared(karma);
  karma.configure({
    // override
  });
};

これは、別の構成ファイルからファイル名の配列を取得するのに役立ちました。

16
TDDdev

コマンドラインに渡す引数が何であれ、最初の構成オブジェクトでこの引数camelCasedを取得することに気付きました。

> karma start i-wanna-debug

module.exports = function (config) {
    config.set({
        singleRun: config.iWannaDebug ? false : true
    });
};

これにより、複数の構成で単一のKarma構成ファイルを使用できます。

2