2016-04-08 15 views
11

Bir denetleyicinin başlatılmasında çalıştırılan bir işlevi görmeye çalışıyorum, ancak test her zaman başarısız oldu. $scope.$digest() numaralı çalıştırmayı deniyorum ve bu çalışmıyor, Ancak konsolda, işlevin çağrıldığını görüyorum.Açısal Test: Bir denetleyicinin başlatılmasında çalıştırılan bir işlev casusluk

Bunu anlayamıyorum, Birisi bana bunun neden çalışmadığını açıklayabilir mi?

Codepen Örnek: Kontrolör başlatır casus gerçek işlevi tarafından geçersiz olur çünkü http://codepen.io/gpincheiraa/pen/KzZNby

Kontrolör

function Controller($stateParams, $scope){ 

    $scope.requestAuthorization = requestAuthorization; 

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

Test

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

    beforeEach(module('exampleApp')); 

    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');   
    })); 

    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() { 
       //$scope.$digest(); 
     expect($scope.requestAuthorization).toHaveBeenCalled(); 
    }); 

}); 
+0

seni de denetleyicisi başlatmak zorunda kalacak inanıyoruz: Bunu önlemek için bir yolu denetleyicisi bu özelliğin değer atamak çalıştığında maymun yama requestAuthorization özelliği için özel belirleyici ile $scope nesneyi, o casus yaratabilecek olan Test durumunun kendisi, kontrol cihazının başlatılmasından önce, daha sonra beklenen sonucu kontrol edin. – northsideknight

cevap

7

Testiniz başarısız oluyor.

beforeEach(inject(function($controller, _$rootScope_, _$injector_, _$stateParams_) { 
     $rootScope = _$rootScope_; 
     $scope = $rootScope.$new(); 
     var reqAuthSpy; 
     Object.defineProperty($scope, 'requestAuthorization', { 
      get: function() {return reqAuthSpy;}, 
      set: function(fn) { 
      reqAuthSpy = jasmine.createSpy('reqAuthSpy'); 
      } 
     }); 
     $stateParams = _$stateParams_; 
     $stateParams.requestAuthorization = true; 


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

    }));