Protractor: Unterstützung für das Hinzufügen von Mock-Modulen zu Angular 2-Anwendungen

Erstellt am 6. Apr. 2016  ·  31Kommentare  ·  Quelle: angular/protractor

Derzeit ist es nicht möglich, Mock-Module für Angular 2-Anwendungen hinzuzufügen.

Diese Ausgabe spiegelt die hier geposteten TODOs wider .

Und um auf den relevanten SO-Post zu verweisen: http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request.

Danke.

user experience feature request

Hilfreichster Kommentar

@ jlin412 ja, irgendwann, aber es erfordert Nachforschungen und sorgfältiges Nachdenken darüber, wie es sowohl in aot als auch in non-aot funktioniert. Wenn Sie Hybrid verwenden, funktioniert es weiterhin für die ng1-Bits.

Alle anderen – verwenden Sie bitte die Emoji-Antwort von github auf +1-Probleme. Das Hinzufügen von Kommentaren macht es schwierig, echte Fortschritte zu analysieren. Ich werde diese Kommentare entfernen, damit dies lesbar ist. Danke!

Alle 31 Kommentare

@juliemr Planen wir Mock für Angled 2 zu unterstützen? Wenn ja wann? Wenn wir den Hybridmodus verwenden, wird Mock in der Zwischenzeit weiter funktionieren?

@ jlin412 ja, irgendwann, aber es erfordert Nachforschungen und sorgfältiges Nachdenken darüber, wie es sowohl in aot als auch in non-aot funktioniert. Wenn Sie Hybrid verwenden, funktioniert es weiterhin für die ng1-Bits.

Alle anderen – verwenden Sie bitte die Emoji-Antwort von github auf +1-Probleme. Das Hinzufügen von Kommentaren macht es schwierig, echte Fortschritte zu analysieren. Ich werde diese Kommentare entfernen, damit dies lesbar ist. Danke!

@juliemr Haben wir eine ETA zur Mock-Implementierung für Angle 2?
Gibt es auch eine Alternative, die wir in der Zwischenzeit verwenden können?

VON: http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request.

Gleiches gilt für die Pakete http-backend-proxy und httpbackend.

Daher habe ich eine E2E-Testumgebung mit Docker-Compose erstellt, aber ich halte die Implementierung für übertrieben.

Haben Sie derzeit Best Practices?

Ich bin auf das gleiche Problem gestoßen, weil ich meine Backend-Aufrufe verspottet habe. Da wir Connect-Middleware verwenden, um unsere App auszuführen, habe ich ein Plug-in erstellt, mit dem Sie Ihre HTTP-Anfrage mit Winkel 1 und 2 simulieren können.

https://mdasberg.github.io/ng-apimock/

vielleicht kannst du es gebrauchen.

Ich bin mir nicht sicher, mit welchem ​​​​Maschinismus dies zu tun ist, aber ich denke, der naive Ansatz zum Installieren von Scheinmodulen wäre der folgende:

Protractor würde diese beiden Methoden irgendwie außer Kraft setzen:

  • platformBrowserDynamic().bootstrapModule
  • platformBrowser().bootstrapModuleFactory

An ihrer Stelle wäre ein einfacher Wrapper, der ein neues ngModule erstellt und die Module bereitstellt, die wir verspotten möchten (unten ist ein Pseudo-Code, wie es aussehen würde):

function bootstrapModuleOverride (moduleToBootstrap) {
  @NgModule({
    imports: [moduleToBootstrap],
    provide: ArrayOfMockModules,
    bootstrap: moduleToBootstrap.bootstrap
  })
  class moduleToBoostrapWrapper {}

  platformBrowserDynamic().bootstrapModule(moduleToBoostrapWrapper);
}

Irgendeine Idee, ob es eine geplante Veröffentlichung für diese Funktion gibt?

+1 für diese Funktion. Wir brauchen Mocks in den e2e-Tests in Angular 2+-Anwendungen!

Angular 2+ wächst, also wird diese Funktion ziemlich dringend :)

Ja, ist im Moment absolut entscheidend für unseren Workflow.

Wir sind bereits bei angle5 und können http in den e2e-Spezifikationen immer noch nicht simulieren 😕

( @tauil kleine Welt, huh?)

Hier sind allgemeine Verwendungen, für die ich addMockModule benötige.

1) Injizieren von benutzerdefinierten Abfangjägern.
https://angular.io/guide/http#writing -an-interceptor
Beispiel HTTP-Aktivität erfassen und mit dem Winkelmesser auf die Festplatte schreiben, wenn der Test fehlschlägt.

2) Überschreiben Sie normalerweise die Funktionalität in Diensten, um Datendienste von Drittanbietern zu simulieren.

      .decorator(
          'xyzService',
          [
            '$q', '$delegate',
            ($q, $delegate) => {
              $delegate.isEnabled = () => true;
              return $delegate;
            }
            $delegate.getProfileDetail = () =>
                  $q.when({name: 'Tester 001', title: 'E2E Tester'});
          ])

Für benutzerdefinierte Dienste: Wir könnten dem httpclient-Template-Ansatz folgen. Die Implementierung von (1) würde dies möglicherweise auch lösen.

3) für den Zugriff auf die Interna einzelner Seitenobjekte (allerdings nicht koscher)
ng.probe($0)._debugInfo
Winkelmesser executeScript

Wann wird es umgesetzt?

Könnte das wirklich vertragen!

Dies ist ein Must-Have-Feature, wie kann es zwei Jahre alt sein?!

Als Problemumgehung können Sie jswiremock verwenden, um die Back-End-Aufrufe abzubrechen. Ich habe hier einige Anweisungen geschrieben: https://gist.github.com/jamescookie/f7b854226ca1e133d1b7b2798095b7f4

Eine weitere Alternative ist nock .
Es ist eine universelle Bibliothek zum Mocken von HTTP-Anforderungen, die von keinem Framework abhängig ist.

Sie können ng-apimock verwenden , das bereits auf der Protractor- Site vorhanden ist. Dazu gibt es hier einen tollen Blogbeitrag

Sie können es für AngularJs und Angular-Apps verwenden

Diese Funktion ist so wichtig, dass ich denke, dass sie Teil des Kernwinkelmessers sein sollte, auch wenn ng-apimock gerade in die Kernbibliotheken des Winkelmessers aufgenommen wurde.

Ich versuche, so viel wie möglich mit dem Daumen nach oben zu gehen. Wie ist der Fortschritt bei dieser Funktion? Es ist im Moment ein schwerer Blocker.

Im Ernst, wurde der Winkelmesser gerade für Angular aufgegeben?

Dies ist heute teilweise ohne Änderungen an Winkelmesser oder Winkel machbar. Sie können eine "Mock"-Konfiguration für ng serve erstellen, die einen anderen Satz von Modulen bereitstellt. Dies sollte es Ihnen ermöglichen, Backend-Tests durchzuführen, ohne dass abhängige Server betriebsbereit sein müssen, und Sie müssen das Mocking nicht auf der HTTP-Schicht implementieren. Ich habe hier ein Beispiel-Repository erstellt, das dies demonstriert: https://github.com/westonpace/angular-example-mock-services

Ich skizziere auch die Schritte, die in meiner Antwort auf eine SO-Frage hier erforderlich sind: https://stackoverflow.com/questions/39942118/how-to-inject-different-service-based-on-certain-build-environment-in-angular2 /51772549#51772549

Es ist nicht so einfach/anpassbar wie in Angular 1 (z. B. können Sie nicht verschiedene Scheindienste für verschiedene Tests hinzufügen), aber sobald das Gerüst eingerichtet ist und läuft, sollte das Hinzufügen und Entfernen von Scheindiensten ziemlich einfach sein.

Zusammenfassung einer schnellen - sauberen - bibliothekslosen Möglichkeit, dies hier zu handhaben:

https://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request/51834607#51834607

Gibt es hierzu ein Update? @jlin412 Sie sagten, dass es Nachforschungen und sorgfältiges Nachdenken erfordern wird - haben Sie damit begonnen?

Gibt es hierzu ein Update? @jlin412 Sie sagten, dass es Nachforschungen und sorgfältiges Nachdenken erfordern wird - haben Sie damit begonnen?

@katiesandford , ich glaube, dass der hier beschriebene Ansatz die meisten Testsituationen in diesem Setup abdeckt. Wenn dies nicht der Fall ist, würde ich gerne wissen, was diese Ausreißer sind, damit ich für zukünftige Situationen darüber nachdenken kann

@gabrieldoty Mit diesem Ansatz können Sie sich auf Serviceebene verspotten, aber nicht auf http-Ebene, wenn ich es gut verstehe.
Darüber hinaus möchten Sie in einem verhaltensgesteuerten Entwicklungsansatz, dass Ihre Mocks dynamisch sind. Unterschiedliche Testschritte würden unterschiedliche Mocks einrichten. Dies scheint mit diesem Setup schwer zu erreichen.

@gaeljw tolle Punkte! Ich sehe einige ziemlich klobige Wege, um mit den dynamischen Mocks umzugehen, aber keine Frage, eine dynamische Lösung wäre vorzuziehen!

Meine Anwendung verwendet nur eine einzige Dataservice-Klasse, um alle HTTP-Anforderungen zu verarbeiten, sodass es ziemlich einfach ist, diesen einen Dienst auszutauschen. Aber das ist nicht annähernd so universell wie ein echter HTTP-Mock.

Danke für diese Gedanken!

Irgendetwas Neues darüber? Es sieht so aus, als ob die Entwicklung von Protractor nicht mehr so ​​aktiv ist ...

irgendwelche Updates?

Mocking-Module würden helfen, um #4300 herumzukommen

Wow, dieses Ticket ist jetzt fast 4 Jahre alt! Gibt es Neuigkeiten?

Irgendwelche Neuigkeiten?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen