2017-01-27 7 views
1

私はジャスミン/カルマを使って角度サービスの単体テストを作成しようとしています。私は似たようなサービステストをしていますが、うまくいきます。しかし、これにはいくつかの依存関係があり、別のモジュールにあり、インジェクションでサービスが見つからないだけです。ユニットテスト角サービス、beforeEachインジェクションは実行されません

サービスは次のようになります。 bServiceは同じモジュールにありますが、commonFactorycommonServiceは別のモジュール、たとえばcommonModuleにあります。

(function() { 
    'use strict'; 
    angular 
     .module('myService') 
     .service('aService', aService); 

    aService.$inject = [ 
     'commonFactory', 
     'commonService' 
     'bService' 
    ]; 

    function aService (
     commonFactory, 
     commonService, 
     bService 
    ) { 

    }; 

    return { 
     codeIWantToTest: CodeIWantToTest; 
    } 

    function CodeIWantToTest() { 
      console.log('surprise!'); 
    } 
})(); 

マイジャスミンのテストは次のようになります。

describe('myService.aService', function() { 
    'use strict'; 
    var aService; 
    // I tried adding beforeEach(module('commonModule')); too, but that didn't do anything 
    beforeEach(module('myService')); 

    beforeEach(function() { 
     inject(function(_aService_) { 
      console.log('getting aService'); 
      aService = _aService_; 
     }); 
    }); 

    it('tests my service is defined', function() { 
     expect(myService).toBeDefined(); 
    }); 
}); 

このテストが失敗しました。 myServiceが定義されておらず、注入機能のconsole.logが起動しません。私のkarma.conf.jsは、基本的に依存関係をサービスに注入された順番で表示し、次にサービスとテストを追加します。

インジェクションがサービスを取得しない原因は何ですか?私は何が欠けていますか?私はcommonServiceの同様のテストをしており、うまく動作すると言いました。だから私はうんざりです。

+0

通常、サービスをテストするのではなく、サービスの結果をコントローラでテストします。 –

+0

編集されたコードで、 'bService'に' ''が足りませんでした。場合は、SOにコピーするだけで問題ではなかった。 – ste2425

+0

'aService = _aService_'の最後に' _'がありません。 – shelbydz

答えて

2

私のチームの別の開発者が解決策を見つけ、将来の人々のための回答として投稿したかったのです。私はそれが依存問題であると感じていました、そして、それはありました。 JSのすべてのものを正しくロードしている間、コンポーネントが使用するテンプレートは別のjs依存関係をロードしていました。だから、ジャスミンのためにこれを修正するために、我々は二つの異なるソリューションを持っていた:私たちは追加することができ、コンポーネントテストファイルの先頭に

を:

beforeEach(function() { 
    module(function ($provide) { 
     $provide.constant('myMissingDependency', { 
      // do things to load the dependency here 
      }); 
    }); 
}); 

私たちのケースでは、変換ライブラリた

他の解決策は、 'shim'ファイルをユニットテストディレクトリに追加し、テストの前にkarma.config.jsをロードすることでした。我々はドッカーを使用していて、私はテストがChromeを実行するためにローカルで実行することができなかったので、私はChromeに切り替えることができませんでした

(function() { 
    angular 
     .module('MyService') 
     .constant('myMissingDependency', Object.freeze({ 
      // things to load the dependency 
     })); 
})(); 

:のようにそれは見えました。だから、これに目の第二のセットを加えることは、私が必要としていたものでした。

関連する問題