testen Ich habe einen Controller, der ein Broadcast-Ereignis auf dem Rootscope emittiert. Ich würde gerne testen, dass das Broacast Event korrekt ausgelöst wird.Wie kann ich Broadcast-Ereignis in AngularJS
Mein Code in meinem Controller sieht wie folgt aus:
$scope.$watch("pageIndex", function(){
if($scope.pageIndex == 4)
{
// emit social share
$rootScope.$broadcast('myEvent');
}
});
Ich habe versucht, es mit dem folgenden Code zu testen:
it('Should call myEvent when pageIndex is 4',function(){
scope.pageIndex = 4;
scope.$apply();
expect(rootScope.$on).toHaveBeenCalledWith('myEvent');
});
Aber es sagt mir, dass der Code nicht genannt wird, was ich manuell getestet habe, dass es tut. Ich habe es dann mit folgendem Code versucht:
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();
});
Aber mit dem gleichen negativen Ergebnis. Gibt es eine Möglichkeit zu testen, dass eine Veranstaltung gesendet wird?
es perfekt funktioniert..cheers mate. –
@Mike: Können Sie ein Beispiel für diese Lösung mit Mocha/Chai zeigen? –
@RyanConaway - für Chai sieht es so aus, als würden Sie ein Spion-Plugin wie https://github.com/chaijs/chai-spies benötigen. Für Mocha, besuchen Sie http://sinonjs.org/. Die Dokumentation für beide ist ziemlich klar, wie Sie diese Lösung mit beiden Bibliotheken erreichen würden. –