Ich versuche einen Dienst zu testen, der das gefälschte http-Backend verwenden soll, das von Angulars In-Memory-Datendienst bereitgestellt wird. Dies ist der entsprechende Code:Angular 2-Dienst testen, der ein Versprechen zurückgibt
describe('getCars() method ',() => {
it('should return a resolved Promise', inject([DataService], (service: DataService) => {
service.getCars().then((value) => {
expect(value.length).toBe(3);
});
}));
});
Das Problem ist, ich nicht Jasmins getan Rückruf verwenden kann, den asynchronen service.getCars() Ruf, wegen zu behandeln, wie injizieren Funktion funktioniert. Ich kann nicht async Testhelfer weder verwenden, weil es nicht mit Versprechen arbeiten kann. Also habe ich keine Ahnung, wie ich auf das Versprechen warten soll - der Test läuft einfach ohne jemals zu erreichen, erwarte.
Die Art und Weise mit dem Erhalten der Service von einem TestBed funktioniert, danke. Wenn ich jedoch die Async-Lösung versuche, gibt der Karma-Test-Runner einen Fehler aus: "SetInterval kann nicht innerhalb eines Async-Zonentests verwendet werden" –
Ja, entweder verwenden Sie explizit setInterval oder etwas, das Observable.delay verwendet. Es kann nicht in 'async' verwendet werden. Sie können es aber möglicherweise mit 'fakeAsync' verwenden. Siehe den Link im "Siehe auch". Es zeigt, wie man 'fakeAsync' verwendet –