Wie mache ich einen Komponententest für Http Post, Put, löschen mit MockBackend in Angular2?

9

Also teste ich meine angular2 Komponenten & amp; Dienstleistungen.

Bisher habe ich mockBackend verwendet, um eine Anfrage im Service zu verspotten, wie unten:

%Vor%

Wenn Sie mein service.ts sehen möchten, wie folgt:

%Vor%

von dem oben genannten Dienst habe ich getAllPages () & amp implementiert; getPageById () -Methoden in meiner Datei service.spec.ts korrekt, da sie gut funktionieren.

Ich möchte wissen, wie man Testfälle für savePage() , updatePage() , deletePage() Methoden implementiert.

Irgendwelche Eingaben?

Vielen Dank im Voraus.

    
Bhushan Gadekar 09.09.2016, 07:35
quelle

1 Antwort

3

Sie müssen die Interna der Methoden untersuchen und sehen, was sie macht. So testen Sie das erwartete Verhalten.

  • Sie legen den Content-Type-Header fest. Dies ist also eine Voraussetzung, und Sie sollten dieses Verhalten testen. Sie können die Header von MockConnection#request

    erhalten %Vor%
  • Sie legen die URL fest, dies ist also eine Voraussetzung. Dies sollte getestet werden. Du schon

    %Vor%
  • Sie senden Daten. Das ist also eine Voraussetzung. Sie sollten prüfen, ob die Daten das erforderliche Format / die Struktur aufweisen.

    %Vor%

Das ist für den Anfrageteil.

Für den Antwortteil sollten Sie testen, was Ihr Dienst mit dieser Antwort macht.

  • Wenn Sie einen Body erhalten, sollten Sie ihn wie bei der GET-Anfrage testen.

  • Sie behandeln den Fehler auch mit einem Fehlerrückruf. Sie müssen nicht testen, was der Rückruf hier tut. Das sollte ein eigener Test sein. Alles, was wir testen wollen, ist, dass das Fehler-Handle von der Methode, die Tests sind, aufgerufen wird. Dafür sollten wir einen Spion benutzen. Wir können die Funktion handleError ausspionieren und dann prüfen, ob sie aufgerufen wurde.

    %Vor%

    Ich konnte keinen Fall finden (mit der MockConnection), wo die Methode catch für Ihre HTTP-Anfrage aufgerufen wird, deshalb habe ich kein Beispiel gepostet. Ich habe conn.mockError(new Error()) ausprobiert, es hat nicht funktioniert. Ich habe versucht, einen Fehler in der Verbindung zu werfen, es hat nicht funktioniert. Vielleicht kannst du es herausfinden.

Paul Samsotha 14.09.2016, 16:20
quelle