2016-09-23 3 views
0

この質問は、サービスをテストするサービスやサービスを置き換えるモックを提供することについてのものではありません。ジャスミンテストにユーティリティサービスを注入する

状況:私がテストしたい

工場は、プロパティのセットを解析についてですゲッター機能を経由して、この情報を提供します。次の擬似コード(動的データ長に応じてテストを作成するのは非常にハックですが、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を注入する機会はありませんか?

私を助けてくれてありがとう!

答えて

1

あなたUtilServiceが工場である場合、あなたはジャスミンは限り、あなたはあなたのカルマに正しく依存関係のすべてをロードするよう、テストを設定し、各

beforeEach(function() { 
    module('app'); 

    var UtilService; 

    inject(function(_UtilService_) { 

     UtilService = _UtilService_; 

    }); 
}); 

前の方法で、すべてのテストにサービスを注入することができますConfigでは、$ injectorを使用してサービスを取得する必要はありません。

アンダースコアはおそらく少し混乱している可能性があるため、角度は毎回新しいインスタンスを作成できるように強調されたサービスを提供します。

+0

これは、サービスの注入を書き込む方法のもう一つの方法です。これはジャスミンの実行順序に影響しません。注射はまだ#8として実行されているので、#3の後、Util-Serviceを使用する必要があります。カルマの設定でUtilサービスを事前定義する方法はありますか?または、必要な* .jsファイルを指定するファイルリストを意味しますか?問題はサービスを正しく注入することではなく、beforeEach()より早くサービスを注入することです。 –

関連する問題