AngularJS - Wie kann ich testen, ob eine Funktion von einer anderen Funktion aufgerufen wird?

9

Ich versuche, mit Karma-Jasmin zu beginnen, und ich frage mich, warum dieser Test fehlschlägt:

%Vor%

In meinem Controller, den ich vorher für diesen Test eingerichtet habe, habe ich folgendes:

%Vor%

Sowohl addNew als auch fakeFunction werden unter Verwendung von:

verfügbar gemacht %Vor%

Der Test schlägt jedoch mit folgendem fehl:

Expected spy fakeFunction to have been called.

Ich kann den Test bestehen lassen, wenn ich die Funktion aus meinem Test herausrufe. Ich hatte gehofft, ich könnte allerdings testen, ob fakeFunction von einer anderen Funktion aufgerufen wurde. Was ist der richtige Weg, um dies zu erreichen?

Aktualisierung:

%Vor%

Wenn ich etwas wie:

teste %Vor%

Der Test wird bestanden, wenn ich Folgendes in meinen Controller einfüge:

%Vor%

Ich möchte nur wissen, wie ich testen kann, ob eine öffentliche Funktion von einer anderen Funktion aufgerufen wurde.

    
Raphael Rafatpanah 07.01.2015, 15:36
quelle

2 Antworten

9

Ihre addNew -Methode ruft fakeFunction auf. Es ruft jedoch nicht controller.fakeFunction auf, was Ihre Erwartung ist.

Sie müssen Ihren Code ändern, um Ihren Controller anstelle dieser unabhängigen Funktionen zu verwenden.

BEARBEITEN : Sie müssen auch Ihre Funktion addNew nicht ausspionieren. Dadurch wird die Funktion durch einen Spion ersetzt. Die andere Alternative ist, es zu ändern:

%Vor%     
Vadim 07.01.2015, 15:43
quelle
8

Ich bin gerade selbst auf dieses Problem gestoßen. Die vorherige Antwort von @Vadim hat die richtigen Prinzipien, aber ich denke nicht, dass alles sehr klar war. In meinem Fall versuche ich, eine öffentliche Funktion für einen Dienst innerhalb einer anderen Funktion aufzurufen. Hier sind die relevanten Schnipsel:

Service:

%Vor%

Test:

%Vor%

Der Schlüssel hier ist, dass die zu testende Funktion die gleiche Referenz aufrufen muss wie die öffentliche Funktion, auf die spioniert wird.

    
Alex White 01.06.2015 17:31
quelle