J'ai besoin de tester un service angulaire interne implémenté sous Angular 1.5.9 avec du jasmin/karma.
Je dois écrire un test qui vérifie que la réponse d'une fonction de service particulière est comme prévu. Pour ce faire, je construis un objet fantôme, en instanciant le service, en appelant la fonction à tester et en utilisant expect().toBe()
pour vérifier la valeur retournée.
Malheureusement, le service effectue de nombreux appels à ses propres fonctions, dont beaucoup font d'autres appels en utilisant le service angulaire $http
. Il le fait afin de peupler des objets tels que les données de l'utilisateur, les paramètres régionaux et d'autres informations sur le produit sur mesure. Autant dire que je ne suis pas en mesure de refactoriser le service en une meilleure architecture; Je dois simplement construire ce test.
Comme il y a tant d'appels à $http
je compte railler toutes les données qu'il demanderait à l'aide d'une série de lignes comme celle-ci:
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
Quand j'appelle la fonction à tester, je fais appel immédiatement $httpBackend.flush()
mais, comme le test échoue, je crains que ce que je dois faire est que chaque appel (falsifié) $http
soit vidé avant que le prochain soit fait.
Ai-je besoin de faire cela ou est en train de configurer toutes les entrées $httpBackend.when().respond()
, en agissant sur la fonction de test, puis en appelant un seul flush()
assez? Si cela ne suffit pas, que dois-je faire?