2013-10-14 2 views
2

Мне просто интересно, как я могу проверить событие handleAddClientBroadcast?Как проверить, что событие транслировалось в AngularJS?

У меня есть навигационное обслуживание как так:

angular.module("ruleManagement.services") 
    .factory('navigationService', function ($rootScope) { 

     var navigationService = {}; 

     navigationService.prepForBroadcast = function() { 
      this.broadCastIsAddClientItem(); 
     }; 

     navigationService.broadCastIsAddClientItem = function() { 
      $rootScope.$broadcast('handleAddClientBroadcast'); 
     }; 

     return navigationService; 
    }); 

Я впрыснуть эту услугу навигации в мой clientsCtrl и поймать handleAddClientBroadcast как так:

$scope.$on('handleAddClientBroadcast', function() { 
    $scope.clientModel = { 
    id: 0, 
    name: "", 
    description: "", 
    rules: [] 
    }; 

    var lastClient = _.findLast($scope.clients); 

    if (typeof lastClient == 'undefined' || lastClient == null) { 
    lastClient = $scope.clientModel; 
    } 

    $scope.clientModel.id = lastClient.id + 1; 
    $scope.clients.push($scope.clientModel); 
}); 

Спасибо.

+0

Я нашел этот полезный тоже: http://stackoverflow.com/questions/15272414/how-can-i-test-events-in-angular – Ben

+0

возможный дубликат из [Как проверить $ scope. $ on в AngularJS] (http://stackoverflow.com/questions/19441782/how-do-i-test-scope-on-in-angularjs) – ivarni

ответ

8

Предполагая, что вы используете Жасмин

spyOn($rootScope, '$broadcast').andCallThrough(); 

... 

expect($rootScope.$broadcast).toHaveBeenCalledWith('eventName'); 
+3

Это более поздние версии жасмина it is spyOn (scope, '$ broadcast'). and.callThrough(); – Madhan

Смежные вопросы