I have a controller and want to test it with Jasmine. In the controller class that I want to test, there is $ on listener. How to fire $ emit event to fire $ on listener?
myApp.controller('superCtrl', function ($scope) { $scope.hero = 'Rafael ninja turtle'; $scope.$on('change_hero', function (event, new_hero) { $scope.hero = new_hero; }); });
The $ test on the listener works correctly when the change_hero event arrives:
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'); }); });
angularjs unit-testing jasmine
barba
source share