2016-04-07 4 views
0

を渡していないことは非常に簡単なテストだ...、それは渡していない...誰かがこのにいくつかの光を投げることができる場合:)イオンユニットテスト、spyOnは

これは、そのコントローラのコード(その一部)であります

AppCtrl

$scope.requestAuthorization = function() { requestAuthorization(); }; 

    if ($stateParams.requestAuthorization === true) { 
     console.log('$stateParams.requestAuthorization'); 
     $scope.requestAuthorization(); 
    } 
    function requestAuthorization() { 
     console.log('requestAuthorization()'); 
     // more code here.. 
    } 

テスト

describe('AppCtrl', function() { 
    var AppCtrl, $rootScope, $scope, $stateParams; 

    beforeEach(module('myapp')); 

    // disable ionic cache to avoid GET errors 
    beforeEach(module(function($provide, $urlRouterProvider) { 
     $provide.value('$ionicTemplateCache', function() {}); 
     $urlRouterProvider.deferIntercept(); 
    })); 

    beforeEach(inject(function($controller, _$rootScope_, _$injector_, _$stateParams_) { 
     $rootScope = _$rootScope_; 
     $scope = $rootScope.$new(); 
     $stateParams = _$stateParams_; 
     AppCtrl = $controller('AppCtrl',{ 
      $scope: $scope 
     }); 
     spyOn($scope, 'requestAuthorization'); 
     $stateParams.requestAuthorization = true; 
    })); 

    it('$stateParams.requestAuthorization should be defined', function() { 
     expect($stateParams.requestAuthorization).toBeDefined(); 
    }); 

    it('$scope.requestAuthorization should be defined', function() { 
     expect($scope.requestAuthorization).toBeDefined(); 
    }); 

    // this test is not passing.. 
    it('should call requestAuthorization', function() { 
     expect($scope.requestAuthorization).toHaveBeenCalled(); 
    }); 
}); 
をテストする必要があります

実際に関数が呼び出されていますが、コンソールにconsole.logが表示されていますが、それは通過していません。

簡単にテスト、すべてはあなたの時間を

おかげで..最後のものを除い..渡す:)

$stateParams.requestAuthorization、および$scope.requestAuthorizationがあります。最初はブール型で、もう1つは関数であり、関数は渡されません。

答えて

0

beforeEachブロックで、コントローラをインスタンス化する前に$ stateParamsを定義します。

beforeEach(inject(function($controller, _$rootScope_, _$injector_, _$stateParams_) { 
      $rootScope = _$rootScope_; 
      $scope = $rootScope.$new(); 
      $stateParams = _$stateParams_; 

      $stateParams.requestAuthorization = true; 

      AppCtrl = $controller('AppCtrl',{ 
       $scope: $scope, 
       $stateParams: $stateParams 
      }); 
      spyOn($scope, 'requestAuthorization'); 

     })); 
+0

いいえ、うまくいきません:/実際には奇妙ですが、私は別のコントローラで非常に似たテストをしていますが、このコントローラでは動作しません。 – Ariel

関連する問題