この質問は、サービスをテストするサービスやサービスを置き換えるモックを提供することについてのものではありません。ジャスミンテストにユーティリティサービスを注入する
状況:私がテストしたい
工場は、プロパティのセットを解析についてですゲッター機能を経由して、この情報を提供します。次の擬似コード(動的データ長に応じてテストを作成するのは非常にハックですが、supprisinglyそれが動作します。)今何が起こっているかを説明し
...
describe('fancyTest', function() {
// 1
beforeEach(function() {
// 7
module('app');
inject(function($injector) {
// 8
Factory = $injector.get('app.ToTestFactory');
UtilService = $injector.get('app.Util'); // bad, as to late...
});
});
// 2
describe('dataTest', function() {
// 3
// Goal: data = UtilService.getData('dataset1');
data = [{id:'test1'}, {id:'test2'}];
for (i = 0, l = data.length; i < l; i += 1) {
test(data[i]);
}
function test(properties) {
// 4
describe('datatest #' + i, function() {
var elem;
// 5
beforeEach(function() {
// 9
elem = new Factory(properties)
});
// 6
it('should provide the correct id', function() {
// 10
expect(elem.id()).toBe(properties.id);
});
...
});
}
}
...
}
UtilService.getDataは()を読み取り、簡単な方法であり、テストを実行するときにのみ注入されるいくつかの定数からのデータ。おそらく大事なことですが、私は非同期にロードしたくありません。
問題:
ジャスミンのフレームワークは非常にuninituitiveワークフローと最初の実行を持っており、それがbeforeEachを通る前に、すべてのブロックを記述する初期化します。コメントはコメントに書かれています。
データループが実行される前にUtilServiceを注入する機会はありませんか?
私を助けてくれてありがとう!
これは、サービスの注入を書き込む方法のもう一つの方法です。これはジャスミンの実行順序に影響しません。注射はまだ#8として実行されているので、#3の後、Util-Serviceを使用する必要があります。カルマの設定でUtilサービスを事前定義する方法はありますか?または、必要な* .jsファイルを指定するファイルリストを意味しますか?問題はサービスを正しく注入することではなく、beforeEach()より早くサービスを注入することです。 –