E2E-Mock $ httpBackend geht für mich nicht wirklich durch

Obwohl ich glaube, dass ich dem folgeAnleitung hier Das Einrichten von $ httpBackend zum Übergeben ausgewählter Anforderungen an den Server funktioniert bei mir nicht.

Hier ist ein Plunkr mit einem nicht bestandenen Test das zeigt, was ich tue und erklärt in Kommentaren, was falsch zu laufen scheint.

Mein Höhlenforscher legt nahe, dass aus irgendeinem Grund der Schein$httpBackend hat keine innere Kopie des realen$httpBackend Wenn es Zeit wird, die XHR-Anforderung zu durchlaufen, wird sie an den Mock übergeben$httpBackend stattdessen. Dieser zweite Aufruf löst eine Ausnahme aus, da er nicht weiß, was mit der Anforderung zu tun ist.

Antwort auf dtabuenc

Ich erinnere mich mit Dankbarkeit an Ihren Beitrag auf halber Strecke. Sie identifizieren einen wichtigen Bereich von Integrationstests, der zwischen Unit- und E2E-Tests liegt. Ich stehe auf diesem Mittelweg.

Ich denke nicht, dass Sie überhaupt snarky sind. Deine Antwort ist vollkommen vernünftig ... oder sowäre vernünftig wenn es nicht durch den Text der widersprochen wurde "API-Referenz / ngMockE2E / $ httpBackend". Ich zitiere:

Diese Implementierung kann verwendet werden, um mit statischen oder dynamischen Antworten über zu antwortenwhen API und seine Verknüpfungen (whenGET, whenPOSTusw.) undOptional können Anfragen an den Real weitergeleitet werden$httpBackend für bestimmte Anfragen (z. B. um mit bestimmten Remote-APIs zu interagieren oder Vorlagen von einem Webserver abzurufen) ...

[I] n ein End-to-End-Testszenariooder in einem Szenario, in dem eine Anwendung entwickelt wird, bei der die echte Back-End-API durch einen Schein ersetzt wird, ist es oft wünschenswert, dass bestimmte Kategorien von Anforderungen den Schein und den Schein umgehenStellen Sie eine echte http-Anfrage .... Um das Backend mit diesem Verhalten zu konfigurieren, verwenden Sie diepassThrough Request-Handler von when stattrespond[Hervorhebung von mir].

Die Dokumentation enthält keine Informationen zu E2E$httpBackend Verwendung in einer Jasmine-Umgebung. Ich kann mir keinen Grund vorstellen, dies auszuschließen. Wenn es einen solchen Grund gibt, sollten sie es klar ausdrücken. Ernsthaft, wer liest über aspotten Komponente und antizipiert nicht die Verwendung in einer Testumgebung?

Zu "Anfragen an den Real weiterleiten$httpBackend für spezifische Anfragen, z.B. mit bestimmten entfernten apis interagieren"ist genau das, was ich vorhabe. Was könnten sie möglicherweise mit" real $ httpBackend "meinen, außer der nicht gespielten Version dieser Komponente?

Ich verstehe Ihre Behauptung nicht

DasngMocksE2E Das Modul wurde entwickelt, um auf der "Server" -Seite von Dingen verwendet zu werden, auf denen die eigentliche Winkelanwendung ausgeführt wird.

Das Wort "Server" erscheint genau dreimal auf dieser Seite, was nicht ein einziges Mal darauf hindeutetirgendein Anwendungscode würde auf einem "Server" ausgeführt. Ich weiß nicht, was Sie mit der "tatsächlichen Winkelanwendung" meinen, die auf der "Server" -Seite der Dinge ausgeführt wird.

Der Dokumentation ist völlig klar, dass der E2E$httpBackend ist nicht auf E2E-Tests beschränkt. Es ist auch für "Ein Szenario, in dem eine Anwendung entwickelt wird, bei der die echte Back-End-API durch einen Schein ersetzt wird".

Das ist nur einen halben Schritt von meinem Szenario entfernteine Bewerbung wirdgeprüft mit dem echten Backend-API. "

In meinen Szenarien ruft das SUT eine Komponente auf, die Daten von einem Server abruft. Meine Tests bestätigen, dass es dieser abhängigen Komponente gelingt, solche Anforderungen an das echte Backend zu richten, und dass Daten in der erwarteten Weise abgerufen oder gespeichert werden. Dies ist ein Integrationstest, der durch Verspotten des Verhaltens des Backends nicht ausreichend erfüllt werden kann.

Natürlich kann ich mit falschen XHR-Antworten die Fähigkeit der Komponente testen (und testen), richtig auf das zu reagieren, was ich habevorhersagen wird das Verhalten des Backends sein. Dies ist nicht gleichbedeutend damit, dass überprüft wird, ob die Komponente ordnungsgemäß auf die Anweisung reagierttatsächlich Verhalten des Backends ... das sich ändern kann, wenn sich die Anwendung weiterentwickelt und von den verspotteten Antworten in signifikanter Weise abweicht.

Ich würde in Betracht ziehen, Ihren Midway-Tester für diesen Zweck zu verwenden, wenn ich verstehen würde, wie man ihn in den Codepfad des SUT einfügt. Ich nicht. Ich denke, die Komponente, die XHR-Anforderungen erstellt, ist für Sie nicht zugänglichngMidwayTester. Aber ich weiß, wie ich einen echten XHR-Helfer in die Pipeline stecken kann, wenn ich muss.

Hier stehe ich gerade.

Entweder kann jemand zeigen, wie man macht$httpBackend Bestimmte Anfragen an den Server weiterleiten - wie es die Dokumentation verspricht - oder ich ersetze diepassThrough Implementierung selbst mit einer funktionierenden XHR-Implementierung.

Ich bevorzuge die erste Option. Wenn ich auf die Sekunde gehe, biete ich hier einen Link an, der anderen zugutekommt, die meine Bedürfnisse und meine Interpretation der API-Dokumentation teilen.

Gibt es einen dritten Weg, den ich vermisse?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage