mock $ httpBackend in e2e eckigen Tests

8

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?

    
Alexander Zhukov 29.05.2013, 06:40
quelle

3 Antworten

7

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:

%Vor%

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.

    
Axel Örn Sigurðsson 24.06.2013 21:42
quelle
1

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.

So fügen Sie es zu Ihrer App hinzu

Fügen Sie nach dem Hinzufügen der erforderlichen Dateien zu Ihrer Seite einfach scenario als Abhängigkeit zu Ihrer Anwendung hinzu:

%Vor%

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

%Vor%

Wenn Sie Ihre Anwendung laden, geben Aufrufe von /games 200 und {"games": [{"name": "Legend of Zelda"}]}

zurück

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

%Vor%

Wenn Sie jetzt Ihre Anwendung laden, geben Aufrufe von /games 200 und {"games": []}

zurück

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.

    
Nabil Boag 25.01.2016 22:40
quelle
0

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%     
wmluke 20.06.2013 20:49
quelle