2016-03-30 31 views
2

コードの詳細に入ることは役に立たないので、私は少しの抽象化でこの問題にアプローチしようとします。縮小ジャスミンテストは縮小ソースで失敗する

2つのソースファイルに分割された角度モジュール、たとえばsource1.jssource2.jsがあります。次に私は、3つの角度サービス/工場/プロバイダをテストするように設計された3つのユニットテストファイルを持っています。次のように

プロジェクトのレイアウトは次のとおりです。期待通りカルマとジャスミンで実行

root 
| 
-dist 
    | 
    -source.min.js 
-src 
    | 
    -source1.js 
    -source2.js 
-tests 
    | 
    -unit 
     | 
     -service1.js 
     -service2.js 
     -service3.js 

すべての試験は、合格と仕事。ポイントを得るためにカルマの設定のこのビットを参照してください。

files: [ 

    'bower_components/angular/angular.min.js', 
    'bower_components/angular-mocks/angular-mocks.js', 

    'src/*.js', 
    'tests/unit/*.js' 
], 

次私はsource.min.jsgulpjsとソース1とソース2を縮小さと縮小さファイルを使用してテストを実行しようとしたので、次のように私はカルマの設定を変更:

files: [ 

    'bower_components/angular/angular.min.js', 
    'bower_components/angular-mocks/angular-mocks.js', 

    'dist/*.js', // <--- see here. 
    'tests/unit/*.js' 
], 

この構成では、角度依存性注入のためにすべてのテストが失敗します。プロバイダが解決されていないようです。

この原因は何ですか?つまり、ソースコードは同じでなければなりません。

+0

に近いものを追跡する傾向がありますか? サイトでsource.min.jsが正しく動作していますか? –

答えて

2

これは角度依存性の注入と縮小を伴う既知の問題です。また、問題はコードの詳細に正確に存在します。

ケース1:明示的な注入なし

コントローラとして宣言された関数を使用した場合、角度の試みは、サービス名からサービスを推測します。

angular.module('app').controller('MyController', MyController); 

function MyController(service1, service2, ...){ ... service1.doSomething ...} 

ケース2:明示的な注射で

、角度は、それらが注入された順序でコントローラ機能パラメータを使用します。

angular.module('app').controller('MyController', MyController); 

MyController.$inject = ['service1', 'service2', ...] 

function MyController(a, b, ...){ ... a.doSomething ... } 

ケース1は、サービスの名称変更されますと、角度がサービスを推測することはできませんので、縮小とするたびに動作しない、またはbまたはその名前だけを見て、参照してくださいcはなります。

しかし、$は、service1がaであり、service2がbであると言っているので、angularは推測する必要がないので、毎回ケース2が動作します。

Gulpのようなビルドユーティリティを使用している場合は、ng-annotateを使用すると、ケース1で自動的に依存関係が注入され、コードは引き続き動作するはずです。私自身の意見では

、あなたはケース2を使用する必要がありますスタイルの問題として、私はあなたが見ている何のエラーJohn Papa's Angular Style Guide

+0

仲間ありがとう、ngAnnotateはこれを解決しました。 – brazorf