Ich habe genau die gleiche Fehlermeldung, während ich meinen Komponententest durchgeführt und eine beobachtbare Ausnahme ausgelöst habe, nachdem ich meine Dienste verspottet habe.
Ich habe es gelöst, indem ich die genaue Funktion und das Format übergeben habe Observable.throw
.
Tatsächlicher Code, der den Dienst aufruft und subscribe
Daten abruft. Beachten Sie dies, catch
um den 400
Fehler zu beheben .
this.search(event).catch((e: Response) => {
if (e.status === 400) {
console.log(e.json().message);
} else if (e.url) {
console.log('HTTP Error: ' + e.status + ' ' + e.statusText,
'URL: ' + e.url, 'Info: ' + e.json().message));
}
}).finally(() => {
this.loading = false;
}).subscribe((bData) => {
this.data = bData;
});
Der Code innerhalb des Dienstes
search() {
return this.someService.getData(request)
.do((r) => {
this.someService.defaultHeaders.delete('skipAlert');
return r;
})
.map((r) => {
return r.businessObjectDataElements.length && r.businessObjectDataElements || null;
});
}
Unit Testing
Ich habe den SomeService verspottet und beobachtbare Daten zurückgegeben, und es ist in Ordnung, da er alle erforderlichen Methoden enthält.
someServiceApi = fixture.debugElement.injector.get(SomeService);
spyOn(someServiceApi, 'getData').and.returnValue(Observable.of({}));
Der obige Code ist in Ordnung, aber als ich versuchte, die Catch / Error-Bedingung durch Übergeben zu testen, Observable.throw({})
zeigte er mir den Fehler, da er eine Typrückgabe Response
vom Service erwartete .
Die unten stehende Verspottung gab mir diesen Fehler.
someServiceApi.getData
.and.returnValue(Observable.throw(new Response({status: 400, body: [], message: 'not found error'})));
Also habe ich es korrigiert, indem ich die genau erwartete Funktion in meinem Rückgabeobjekt repliziert habe, anstatt einen Response
Typwert zu übergeben.
someServiceApi.getData
.and.returnValue(Observable.throw({status: 400, json: () => { return {message: 'not found error'}}, body: []}));
You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
jedoch passiert, während mein Server ausgeführt wurde und ich zwischen Zweigen gewechselt habe. Alles was ich tun musste war meinen Server neu zu starten und es ging weg.