2017-01-12 78 views
0

我一直在嘗試測試是否在我的控制器上調用了回調。

控制器

(function() { 
    'use strict'; 

    angular 
     .module('GeoDashboard') 
     .controller('CiudadCtrl', CiudadCtrl); 

    CiudadCtrl.$inject = ['$scope', '$interval', '$rootScope','Ciudad']; 

    function CiudadCtrl($scope, $interval, $rootScope, Ciudad) { 

     $scope.refreshCiudad = refreshCiudad; 
     $scope.refreshClima = refreshClima; 

     var removeListenerRefreshCiudad = $scope.$on('refreshCiudad', refreshCiudad); 
     var cancelIntervalIdClima = $interval(refreshClima, 600000); 

     function refreshCiudad() { 
      //... 
     } 
    } 

})(); 

測試

beforeEach(inject(eachSpec)); 

function eachSpec($rootScope, $controller, $httpBackend, $interval, _Ciudad_){ 

    rootScope = $rootScope; 
    scope = $rootScope.$new(); 
    httpBackend = $httpBackend; 
    interval = sinon.spy($interval); 

    CodificacionGeograficaService = _CodificacionGeografica_; 
    CiudadService = _Ciudad_; 

    CiudadController = $controller('CiudadCtrl', { 
     $scope : scope, 
     $interval: interval, 
     Ciudad: CiudadService 
    }); 
} 

it('3. Debería llamar a "refreshCiudad" al escuchar el evento "refreshCiudad"', spec3); 

function spec3(){ 

    sinon.spy(scope, 'refreshCiudad'); 

    rootScope.$broadcast('refreshCiudad'); 

    expect(scope.refreshCiudad).toHaveBeenCalled(); 
    scope.refreshCiudad.restore(); 
} 

但是,當我試圖發出$廣播事件,回調不被調用。

我做錯了什麼?

+0

另一個功能你試過範圍$摘要()。就在你期望的聲明之前? –

+0

是的,我試過了,不工作:( –

回答

0

終於這是工作,但我不明白爲什麼。 溶液包裹爲$scope.$on回調函數在這樣

function CiudadCtrl($scope, $interval, $rootScope, Ciudad) { 

     $scope.refreshCiudad = refreshCiudad; 

     //instead this 
     //var removeListenerRefreshCiudad = $scope.$on('refreshCiudad', refreshCiudad); 
     //I set the callback like this 
     var removeListenerRefreshCiudad = $scope.$on('refreshCiudad', function(){ 
      $scope.refreshCiudad(); //And this work! 
     }); 

     function refreshCiudad() { 
      //... 
     } 
    } 
相關問題