Hat jemand eine Idee, wie man $ httpBackend in e2e eckigen Tests vortäuscht? Die Idee ist, XHR-Anfragen während des Tests auf travis-ci zu unterdrücken. Ich benutze Karma, um Assets und Partials aus meiner Rails-App, die auf Travis läuft, zu proxy zu machen. Ich möchte Akzeptanztests ohne echte DB-Abfragen durchführen.
Hier ist ein Teil meiner Karma-Konfigurationsdatei:
%Vor%Hier ist ein Teil meiner Spezifikationsdatei:
%Vor%Ich habe versucht, den $ httpBackend-Dienst über $ injector zu erhalten:
%Vor%Aber das ist nicht diejenige, die innerhalb von iframe verwendet wird, wo meine Tests laufen.
Der nächste Versuch, den ich gemacht habe, war angular.scenario.dsl, hier ist Code samle:
%Vor%Anwendungsbeispiel:
%Vor%Dies führt zu folgendem Fehler:
%Vor%Also, an diesem Punkt habe ich keine Ahnung von dem nächsten Schritt. Hat jemand versucht, so etwas zu tun, ist diese Art von Stubbing wirklich möglich?
Wenn Sie wirklich versuchen, das Backend in einem E2E-Test zu verspotten (diese Tests heißen Szenarien, während Specs für Komponententests verwendet werden), dann habe ich das in einem Projekt getan, an dem ich früher gearbeitet habe.
Die Anwendung, die ich getestet habe, hieß studentsApp
. Es war eine Anwendung, um nach Studenten zu suchen, indem eine REST API abgefragt wurde. Ich wollte die Anwendung testen, ohne diese API tatsächlich abzufragen.
Ich habe eine E2E-Anwendung mit dem Namen studentsAppDev
erstellt, der studentsApp
und ngMockE2E
injiziert. Dort definiere ich, welche Aufrufe das mockBackend erwarten soll und welche Daten zurückgegeben werden sollen. Das folgende Beispiel zeigt meine studentsAppDev
-Datei:
Dann habe ich einen ersten Schritt in meinem Jenkins CI-Server, um die studentsApp
durch studentsAppDev
zu ersetzen und einen Verweis auf angular-mocks.js
in der Hauptindex.html-Datei hinzuzufügen.
Das Ausspionieren Ihres Backends ist ein wichtiger Schritt beim Aufbau einer komplexen Angular-Anwendung. Es ermöglicht Tests ohne Zugriff auf das Backend, Sie testen die Dinge nicht zweimal und es gibt weniger Abhängigkeiten, um die Sie sich kümmern müssen.
Angular Multimocks ist eine einfache Möglichkeit, zu testen, wie sich Ihre App mit unterschiedlichen Antworten von einer API verhält.
Es erlaubt Ihnen, Sätze von Mock-API-Antworten für verschiedene Szenarien als JSON-Dateien zu definieren.
Außerdem können Sie Szenarien leicht ändern. Es tut dies, indem es erlaubt Sie erstellen "Szenarien" aus verschiedenen Mock-Dateien.
Fügen Sie nach dem Hinzufügen der erforderlichen Dateien zu Ihrer Seite einfach scenario
als Abhängigkeit zu Ihrer Anwendung hinzu:
Sobald Sie dies zu Ihrer App hinzugefügt haben, können Sie damit beginnen, Mocks für API-Aufrufe zu erstellen.
Nehmen wir an, Ihre App führt den folgenden API-Aufruf aus:
%Vor% Sie können eine default
Mock-Datei erstellen:
Beispiel für someGames.json
Wenn Sie Ihre Anwendung laden, geben Aufrufe von /games
200
und {"games": [{"name": "Legend of Zelda"}]}
Nehmen wir nun an, Sie möchten eine andere Antwort für denselben API-Aufruf zurückgeben. Sie können die Anwendung in einem anderen Szenario platzieren, indem Sie die URL z. ?scenario=no-games
Das Szenario no-games
kann eine andere Mock-Datei verwenden, sagen wir mal so:
Beispiel für noGames.json
Wenn Sie jetzt Ihre Anwendung laden, geben Aufrufe von /games
200
und {"games": []}
Szenarien bestehen aus verschiedenen JSON-Mocks in einem Manifest wie folgt:
%Vor% Sie können dann die Mock-Dateien ausschließen und die Abhängigkeit scenario
in Ihrer Produktions-App entfernen.
Das fühlt sich mehr wie Unit / Spec-Tests an. Im Allgemeinen sollten Sie Mocks innerhalb von Unit / Spec-Tests anstelle von E2e / Integrationstests verwenden. Im Grunde denken Sie an e2e-Tests, wie Sie die Erwartungen an eine meist integrierte App erfüllen ... wenn Sie sich über Dinge lustig machen, die den Zweck des e2e-Tests besiegen. In der Tat bin ich mir nicht sicher, wie Karam angular-mocks.js in die laufende App einfügen würde.
Der Spezifikationstest könnte ungefähr so aussehen ...
%Vor%Tags und Links angularjs mocking end-to-end karma-runner acceptance-testing