Wie verspotte ich das Ergebnis eines Versprechens in einem AngularJS-Komponententest?

8

Mein CompanyService ist:

%Vor%

Mein Controller ist:

%Vor%

Mein Test ist:

%Vor%

Aber das resolve funktioniert nicht. Ich bekomme diesen Fehler: TypeError: 'undefined' is not an object (evaluating 'deferred.resolve')

Irgendwelche Hilfe?

    
Shamoon 22.02.2014, 01:34
quelle

1 Antwort

6

In Ihren Tests erstellen Sie Ihr verzögertes Objekt mit der Funktion fake CompanyService.initialized . Diese Funktion wird jedoch nur aufgerufen, wenn Sie $scope.index(); aufrufen, was nach Ihrer deferred.resolve(); -Zeile ausgeführt wird. Folgendes sollte funktionieren:

%Vor%

Aktualisieren

Jasmine unterstützt das Ausspionieren von Eigenschaften, die keine Funktionen sind, nicht. Dein Spy-Setup ist also ungültig, da CompanyService.initialized ein Objekt und keine Funktion ist, also funktioniert dein andCallFake nicht. Ein Workaround ist die Einführung einer Getter-Funktion in CompanyService z. B.:

%Vor%

Und dann in Ihrem Controller verwenden Sie stattdessen diese Getter-Funktion:

%Vor%

Und schließlich aktualisieren Sie Ihre Test-Code-Initialisierung:

%Vor%     
Beyers 25.02.2014, 14:33
quelle