Winkel 4 unit testing mit jasmine /karma mit http-post-Spott - wie kann man das
Ich habe einen service möchte ich unit-Tests im Winkel 4 Typoskript Jasmin.
Nun, die http
ist dabei ein post
, und es gibt eine Identität, aber.. es ist nicht senden, nichts.
Ich will einfach einen guten code-coverage, aber ich verstehe nicht, wie ganz abgeschlossen ist diese spöttische Aussage.
hier ist die Methode für http-post in meinem service-Datei
addSession() {
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.url, JSON.stringify({}), options)
.map((response: Response) => response.json());
}
Dann die SPEC-DATEI , die ich nicht bekommen, was Sie wirklich testen, ich nehme an, vorgetäuscht, dass ich eine Nummer bekommen vom Dienst zurück http post, die Antwort sollte etwas wie 000000014
Spec
import { TrackerFormService } from './tracker-form.service'
import { Observable } from 'rxjs/Observable'
describe('TrackerFormService', () => {
let trackerFormService: TrackerFormService,
mockHttp;
beforeEach(() => {
mockHttp = jasmine.createSpyObj('mockHttp', ['get', 'post', 'put']
)
trackerFormService = new TrackerFormService(mockHttp);
});
describe('addSession', () => {
it('add session ', () => {
//how to test, what to test?
//response , is a number? how to mock/fake this?
})
})
})
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um das zu erreichen, was Sie wollen, die Modelle, die Sie brauchen, ist eine einfache Funktion, die liefert die gleichen wie die POST würde in der Regel selbst; eine andere Sache ist der test sollte nicht auf den server für real, so müssten Sie so etwas wie dieses (müssen Sie möglicherweise andere Abhängigkeiten):
Mit Eckigen 4.3 kam die HttpClient-service, der an die Stelle von Http und bietet eine einfachere Möglichkeit zum simulieren von HTTP-Anfragen. Es ist gut dokumentiert auf der offiziellen Seite: https://angular.io/guide/http
Gut, wie Sie getan setup der test - /mock-Sie können die gefälschten die Rücksendung von der post anrufen und prüfen, dass Sie das Ergebnis Sie erwartet. Sie werden testen, dass das verspottet wird die Antwort sein, richtig umgesetzt, indem Sie Ihren map-Anweisung. Mit Ihrem Spion-Sie können auch überprüfen, wie der post-Methode aufgerufen wurde. Dieser wird überprüfen, ob die Optionen entsprechen, was Sie erwarten.
Aber meiner Meinung nach das ist eine eher komplizierte Lösung. Ich würde es vorziehen, zu vermeiden, verhöhnt und Spione durch die Spaltung der Methode, so dass jede Methode ist nur eine Sache zu tun. Weil Ihr addSession Methode ist derzeit dabei drei verschiedene (und doch logisch abhängig) Dinge:
Wenn du gegen die Methode bis in drei können Sie ganz einfach testen-Methode #1 und #3 in separaten tests und Methode #2 würde nur der Aufruf der http-Bibliothek. Dies können Sie erreichen, den gleichen test Wert wie oben, ohne den Aufruf der http-Bibliothek.
Nun, was zu Methode #2... es ist noch ungetestet und meiner Meinung nach gibt es keinen Grund, es zu testen an alle. Da Sie nicht schreiben, dass code. Auch wenn Sie mit angulars http-Modul ich bin sicher, Sie haben solide unit tests selbst.
Die Antwort von Ihrem service sollte schon abgedeckt werden, die durch eine zusätzliche integration, test, führen Sie weniger Häufig mit der Prüfung des service-api wird noch zurück, was Sie erwarten.
Wenn Sie wirklich wollen, dass eine Zeile grün in Ihrem code-coverage -, dann könnten Sie Optional verwenden Sie eine Bibliothek mit dem Namen nock. Nock fängt alle xhr-Verkehr mit Ihrer app zu verursachen. In der test-Datei können Sie anzeigen xhr-Anfragen zu spotten Antworten mit den nock-Objekt.
JS:
kopiert von: https://www.npmjs.com/package/nock
Für Bezug und weitere Informationen über das testen im Allgemeinen, und wie viel zu testen, empfehle ich gerade
"Budgetierung Wirklichkeit" von Justin Searls
Beispiel-Testfall für die http-service-Anfragen
HTML: