うわー、なんてめちゃくちゃ。これがシナリオです。
- バックボーン駆動のJSアプリ。
次のように初期化されたAMD機能のRequireJS:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
次に、main.js内で次の構成コードを実行します。
require.config( { paths: { ... : ... } });
各バックボーンビュー/モデル/ルーターは「define(...)」モジュールであり、「require( "theOneRouter"、...)」はmain.jsで1回呼び出されます。
Uglify/Closureでオプティマイザーとして使用されるr.js。1つの「コンパイル済み」main.jsは、.netフレームワーク内で動的に選択する./releaseサブフォルダーに作成されます。
Backbone + Require.JSを機能させるのにかなりの時間がかかりましたが、今はうまく機能しています!
次に、その上にジャスミンを叩くのも少しカスタム作業が必要でしたが、うまくいきました。SpecRunner.htmlからrequire.jsをロードし、requireのdefine(...)呼び出しを使用して各テストモジュールをAMDとして定義し、requireのrequire(...)呼び出しから1回Jasmineをインスタンス化して実行する必要がありました。 SpecRunner.html内:
require( [ //"test/specs/testSpec1", "test/specs/views" ], function () { jasmine.getEnv().updateInterval = 1000; var reporter = new jasmine.TrivialReporter(); jasmine.getEnv().addReporter(reporter); .... .... });
これもうまくいきます。ロードと実行をテストします。問題はありません。Requireがすべてを処理します。
ここで、JSTestDriverのようなフレームワークをランナーとして機能させたいと思います。JSTDを選択したのは、そのシンプルさ、リモートブラウザーでのテスト機能、コードカバレッジのサポートのためですが、他の提案も受け付けています。
JSTestDriver自体は正常に動作します。私が抱えている唯一の問題は、JSTD + Jasmine+ReuireJSの組み合わせを一緒に実行することです。最大の問題は、構成ファイルでJSTDにJasmine / Requireテストモジュールをロードするように指示すると、次のエラーが発生することです。
http://requirejs.org/docs/errors.html#mismatch
r.jsを使用してすべてのコードを1つのmain.jsに最適化すると、カバレッジを含む組み合わせは機能しますが、カバレッジは1つの巨大なファイルに収集され、分析するのは困難です。言うまでもなく、50k行のコードjsファイルをインストルメントしてJSTD経由で実行するには非常に長い時間がかかります。
すべてのJasmineテストモジュールとコードモジュールをロードするフィクスチャのようなjsファイルを作成しようとしましたが、上記の「不一致」エラーに戻り続けます。また、JSTDに各モジュールについて個別に通知しない場合(htmlをロードすることにより)実際の読み込みを行う/jsフィクスチャ)コードカバレッジ用にインストルメント化されません。
誰かがこの特定の組み合わせを機能させることができましたか?多分私はあまりにも多くを求めています...