found - cómo simular error de http para la prueba angular2
module not found error can t resolve angular (4)
Estoy escribiendo pruebas unitarias para un servicio angular2. Fragmentos de código:
// jasmine specfile
// already injected MockConnection into Http
backend.connections.subscribe ((c: MockConnection) => {
connection = c;
});
// doing get-request
myServiceCallwithHttpRequest ().subscribe (result => {
// this test passes!
expect (result).toEqual ({
"message": "No Such Object"
});
// this test fails, don''t know how to get the response code
expect (whereIsResponseStatus).toBe (404);
});
connection.mockRespond (new Response (new ResponseOptions ({
body: {
"message": "No Such Object"
},
status: 404
})));
mi servicio:
// service
myServiceCallwithHttpRequest (): Observable<Response> {
return this.http.get (''/my/json-service'').map (res => {
// res.status == null
return res.json ()
})
.catch (this.handleError); // from angular2 tutorial
}
La primera expectativa es que está bien, el programa entra en la llamada del mapa, no la captura. Pero, ¿cómo obtengo el código de estado 404? res.status es nulo.
Para que funcione el error simulado, debe importar ResponseType de @ angular / http e incluir el tipo de error en la respuesta simulada, luego extender la respuesta e implementar el error
import { Response, ResponseOptions, ResponseType, Request } from ''@angular/http'';
import { MockConnection } from ''@angular/http/testing'';
class MockError extends Response implements Error {
name:any
message:any
}
...
handleConnection(connection:MockConnection) {
let body = JSON.stringify({key:''val''});
let opts = {type:ResponseType.Error, status:404, body: body};
let responseOpts = new ResponseOptions(opts);
connection.mockError(new MockError(responseOpts));
}
Repasando el código fuente en node_modules/@angular/http/testing/mock_backend.d.ts
. MockConnection.mockRespond
ya está en su código. MockConnection.mockError
es lo que puede necesitar. Juega con él y mira lo que obtienes.
funciona para mi:
mockConnection.mockRespond (new Response (new ResponseOptions ({
body: {},
status: 404
})));
.subscribe
usar .subscribe
sobre el observable
para registrar el success
, el error
y la devolución de llamada completed
Código
myServiceCallwithHttpRequest (): Observable<Response> {
return this.http.get (''/my/json-service'').map (res => {
// res.status == null
return res.json ()
})
.subscribe(
data => this.saveJwt(data.id_token), //success
err => { //error function
//error object will have status of request.
console.log(err);
},
() => console.log(''Authentication Complete'') //completed
);
//.catch (this.handleError); // from angular2 tutorial
}