angular - promises - object error event thrown unit test
¿Cómo esperar una excepción lanzada asincrónicamente en Jasmine/Angular2/Typescript? (1)
Resolví este problema anulando el método console.error () (en este caso, estoy usando Sinon):
it(''should throw exception from component on submit'', (done) => {
// Jasmine isn''t capable of capturing an exception thrown from an *asynchronous* operation.
// However, that error eventually finds its way to console.error(), so we can stub
// that method and wait for it to be called.
sandbox.stub(console, ''error'').callsFake((...err) => {
expect(err[1]).toEqual(''This is an asynchronously thrown error.'');
done();
});
component.onSubmit();
});
¿Hay alguna otra / mejor manera de hacer esto?
Dado un método Angular2 / Typescript que no devuelve nada e implementa un controlador .subscribe () que podría lanzar, como este:
onSubmit() { // returns nothing
this.service.someCall(this.someData).subscribe(
data => {
return Promise.reject(''This is an asynchronously thrown error.'');
},
err => {},
);
}
(Por el momento, supongamos que hay una buena razón para que este controlador .subscribe () rechace (probablemente de forma condicional) sin otros efectos secundarios comprobables, lo que da como resultado un mensaje de error que sube hasta la parte superior de la aplicación).
¿Cómo se puede probar que este método resultó en una Promesa rechazada?
Encontré algunas personas con la misma pregunta, pero sin respuestas elegantes:
¿Cómo lidiar con errores lanzados en el código asíncrono con Jasmine?