2016-08-29 4 views
0

私は実行時に構成され、特定の値を内部に設定するプロバイダーがあります。プロバイダにはgetメソッドが公開されているため、これらの値は角度コントローラ内でアクセスできます。異なる依存性値を持つAngularJSをテストする

コントローラをテストするときに、プロバイダの価値の異なるケースを効率的にテストする方法はありますか?

正しくテストするための唯一の方法は、テストケースごとにappControllerを再定義し、プロバイダのgetメソッドを再定義して、動作していないと思われるものを返すことです(これは、コントローラそれは参照によってではなく、値によって依存関係を取ります)。 2が記述するにappControllerを再定義

describe("myController", function(){ 
    "use strict"; 
    describe("AppController", function(){ 

     var appController; 
     var $rootScope; 
     var $scope; 
     var providerMock; 


     beforeEach(function(){ 
      module('myController'); 
      inject(function(_$controller_, _$rootScope_){ 
       $controller = _$controller_; 
       $rootScope = _$rootScope_; 
       $scope = _$rootScope_.$new(); 
      }); 

     }); 

     describe('provider value is a', function(){ 
      beforeEach(function(){ 
       providerMock = { get: function(){ return 'a';}}; 
       appController = $controller('appController', { 
        $scope: $scope, 
        provider: providerMock 
       }); 
      }); 
      it('isA should be true', function(){ 
       expect($scope.isA).toEqual(true); 
      )}; 
     }); 

     describe('provider value is b', function(){ 
      beforeEach(function(){ 
       providerMock = { get: function(){ return 'b';}}; 
       appController = $controller('appController', { 
        $scope: $scope, 
        provider: providerMock 
       }); 
      }); 
      it('isA should be false', function(){ 
       expect($scope.isA).toEqual(false); 
      )}; 
     }); 
    }); 
}); 

あなたが見ることができるよう

は、繰り返しのようです。これを回避する方法はありますか?

また、たとえば私が関数をテストしている場合など、プロバイダに無関係な別のテストケースがあるとします。どのappControllerインスタンス化ブランチに配置すればいいですか?それは問題ですか?

答えて

0

$controllerローカル依存関係はユースケースを持っていますが、これはモジュールモックのためのものです。

var providerMockedValue; 

... 

module('myController', { provider: { get: function(){ return providerMockedValue;}} }); 

... 

providerMockedValue = 'a'; 
appController = $controller('appController', { $scope: $scope }); 
関連する問題