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 .subscribe
observable
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
})));