Ich muss einen internen Angular Service testen, der unter Angular 1.5.9 mit Jasmine/Karma implementiert wurde.
Ich muss einen Test schreiben, der überprüft, dass die Antwort einer bestimmten Dienstfunktion wie erwartet ist. Dazu konstruiere ich ein Mock-Objekt, instanziiere den Service, rufe die zu testende Funktion auf und benutze expect().toBe()
, um den zurückgegebenen Wert zu überprüfen.
Leider ruft der Dienst zahlreiche Anrufe zu seinen eigenen Funktionen ab, von denen viele weitere Anrufe unter Verwendung des $http
Winkeldienstes tätigen. Dies geschieht, um Objekte wie Benutzerdaten, Gebietsschema und andere maßgeschneiderte Produktinformationen zu füllen. Es genügt zu sagen, dass ich nicht in der Lage bin, den Dienst in eine bessere Architektur umzuformen; Ich muss diesen Test einfach konstruieren.
Da gibt es so viele Anrufe $http
Ich beabsichtige, alle Daten verspotten würde es mit einer Reihe von Zeilen wie diese Anfrage:
var mockGetCartData = { "d": null, "message": null }; // at the top of the describe
$httpBackend.when('GET', /(.*)\/order\/api\/v1\/GetCart/).respond(200, mockGetCartData); // in the beforeEach
Wenn ich die Funktion aufrufen ich sofort getestet werden, nenne $httpBackend.flush()
aber, als der Test fehlschlägt, bin ich besorgt, dass was ich tun muss, dass jeder (gefälschte) $http
Anruf gelöscht wird, bevor der nächste gemacht wird.
Muss ich dies tun oder alle $httpBackend.when().respond()
Einträge einrichten, auf die Testfunktion einwirken und dann einen einzelnen flush()
genug aufrufen? Wenn das nicht genug ist, was soll ich tun?