Mam kontroler, który emituje zdarzenie broadcast na rootcope. Chciałbym przetestować, czy zdarzenie broacastowe jest uruchamiane poprawnie.Jak mogę przetestować zdarzenie rozgłaszania w AngularJS
Mój kod w moim kontrolera wygląda następująco:
$scope.$watch("pageIndex", function(){
if($scope.pageIndex == 4)
{
// emit social share
$rootScope.$broadcast('myEvent');
}
});
starałem się przetestować go z następującego kodu:
it('Should call myEvent when pageIndex is 4',function(){
scope.pageIndex = 4;
scope.$apply();
expect(rootScope.$on).toHaveBeenCalledWith('myEvent');
});
Ale to mówi mi, że kod nie jest wywoływana, które ręcznie przetestowałem. Próbowałem następnie z następującym kodem:
it('Should call myEvent when pageIndex is 4',function(){
var listener = jasmine.createSpy('listener');
rootScope.$on('myEvent', listener);
scope.pageIndex = 4;
scope.$apply();
expect(listener).toHaveBeenCalled();
});
Ale z tym samym wynikiem negatywnym. Czy istnieje sposób na sprawdzenie, czy wydarzenie jest transmitowane?
to doskonale działało .. szt. Kolczugi. –
@Mike: W jaki sposób możesz pokazać przykład tego rozwiązania z Mocha/Chai? –
@RyanConaway - dla Chai wygląda na to, że potrzebujesz wtyczki szpiegowskiej, takiej jak https://github.com/chaijs/chai-spies. Dla Mocha, sprawdź http://sinonjs.org/. Dokumentacja obu tych metod jasno pokazuje, w jaki sposób można osiągnąć to rozwiązanie w przypadku dowolnej biblioteki. –