7
У меня есть контроллер и вы хотите протестировать его с помощью Жасмина. В классе контроллера, который я хочу протестировать, есть $ on listener. Как запустить событие $ emit для запуска $ on listener?
myApp.controller('superCtrl', function ($scope) {
$scope.hero = 'Rafael ninja turtle';
$scope.$on('change_hero', function (event, new_hero) {
$scope.hero = new_hero;
});
});
Тест $ на слушателя работает собственно, когда 'change_hero' событие приходит:
describe('Super controller', function() {
var $scope,
super_controller;
beforeEach(function(){
module('myApp');
inject(function($rootScope, $controller){
$scope = $rootScope.$new();
super_controller = $controller('superCtrl', {$scope: $scope});
spyOn($scope, '$on');
});
});
it('should change change hero on change_hero event', function(){
var new_hero = 'Ralf ninja turtle',
sub_scope = $scope.$new();
sub_scope.$emit('change_hero', new_hero);
expect($scope.$on).toHaveBeenCalled();
expect($scope.hero).toBe('Ralf ninja turtle');
});
});
Не работает ли это? Я не понимаю, в чем проблема? –
Если переменная '$ scope.hero' изменилась, то' spyOn' не требуется. – rvignacio
Это просто пример не из реальной жизни. Давайте подумаем, что мне нужно проверить, был ли $ on запущен или нет. – barba