comment simuler une erreur http pour le test angular2
j'écris des tests pour un service angular2. Des extraits de Code:
// 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
})));
mon Service:
// 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 première attente est OK, le programme va dans l'appel de carte, pas la prise. Mais comment obtenir le code 404? res.le statut est null.
4 réponses
pour que l'erreur simulée fonctionne, vous devez importer Responsietype à partir de @angular / http et inclure le type d'erreur dans la réponse simulée, puis étendre la réponse et implémenter L'erreur
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));
}
en parcourant le code source à node_modules\@angular\http\testing\mock_backend.d.ts.
MockConnection.mockRespond est déjà dans votre code.
MockConnection.mockError est ce que vous pourriez avoir besoin.
Jouez avec et voyez ce que vous obtenez.
Vous devez utiliser .subscribeobservable pour vous inscrire success,error& completed rappel
Code
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
}
fonctionne pour moi:
mockConnection.mockRespond (new Response (new ResponseOptions ({
body: {},
status: 404
})));