observables - ¿Cómo puedo simular un Observable.throw en una prueba Angular2?
que es un observable angular (2)
Debería create
un observable, y simplemente llamar al error
observador. Por ejemplo
let mockService = {
error: false,
data: ''something'',
getData: () => {
return Observable.create(observer => {
if (this.error) {
observer.error(new Error(..))
} else {
observer.next(this.data);
}
observer.complete();
})
}
}
Ahora para sus pruebas, puede usar el simulacro para casos de éxito y casos de error. Para un caso de error, simplemente establezca la propiedad del error
en verdadero. En el caso de éxito, se llama al next
con los datos.
Cuando se suscribe a un observable, puede pasar tres devoluciones de llamadas, success
, error
y complete
service.getData().subscribe(
(data) => {} // sucess
(error) => {} // error
() => {} // complete
)
Entonces, con el observer
, al llamar a observer.next
, observer.error
, observer.complete
, se llamará a la devolución de llamada correspondiente.
Quiero probar el manejo de errores en mi componente Angular2 y, por lo tanto, quiero simular un servicio para devolver un Observable.throw (''error''). ¿Cómo se puede hacer eso usando Jasmine y Karma y Angular 2?
Simplemente puede simular el objeto Observable throw error como Observable.throw ({status: 404}) y probar el bloque de error de observable.
const xService = fixture.debugElement.injector.get(SomeService);
const mockCall = spyOn(xService, ''method'')
.and.returnValue(Observable.throw({status: 404}));