Jasmine + AngularJS: Wie kann $ rootScope. $ broadcast mit Argumenten aufgerufen werden?

8

Ich versuche, einen Komponententest zu schreiben, der überprüft, dass $rootScope.$broadcast('myApiPlay', { action : 'play' }); aufgerufen wird.

Hier ist das myapi.js

%Vor%

Und hier ist mein Unit Test:

%Vor%

Hier ist der Fehler, den ich beim Ausführen von grunt test :

erhalte %Vor%

Ich habe auch versucht mit expect(rootScope.$broadcast).toHaveBeenCalled() und ich habe einen ähnlichen Fehler: Expected spy $broadcast to have been called. .

Ich möchte überprüfen, ob diese Methode tatsächlich mit den richtigen Parametern aufgerufen wurde.

Danke!

    
Andrea 12.09.2014, 22:04
quelle

2 Antworten

14

Der Grund, warum Ihre Tests nicht bestanden haben, ist, dass Sie die falsche $ Broadcast-Funktion ausspionieren. In Ihrer beforeJeach-Installation fragen Sie, ob der $ rootScope injiziert werden soll, und dann erstellen Sie einen untergeordneten Bereich, indem Sie $ rootScope aufrufen. $ New ().

Der Rückgabewert von $ rootScope. $ new () ist nicht länger das rootScope, sondern ein Kind des root-Bereichs.

%Vor%

In Ihrer Wiedergabefunktion rufen Sie $ roadcast auf dem $ rootScope auf, aber in Ihrem Test spionieren Sie ein Kind von $ rootScope aus.

%Vor%

Um dies zu beenden, entfernen Sie den Aufruf von $ rootScope. $ new () und spionieren Sie einfach den $ rootScope aus, den Ihnen der Injektor gegeben hat. Das $ rootScope, das für Ihren Komponententest bereitgestellt wird, ist das gleiche $ rootScope, das für Ihren API-Dienst bereitgestellt wird, sodass Sie direkt auf $ rootScope spionieren sollten.

Schau dir die Plunkr Ссылка

an     
jcruz 12.09.2014, 22:46
quelle
1

Es wird für Sie hilfreich sein Ссылка Dein Test ist nicht klar. Vermeiden Sie "erwarten" in Bedingungen, Rückrufe und solche Dinge. Wenn dein Zustand nicht wahr ist, hast du einen Test ohne Behauptung.

Es ist besser, den zweiten Parameter der Funktion zu verwenden:

%Vor%     
Łukasz 12.09.2014 22:24
quelle