Ответ 1
работает для меня:
mockConnection.mockRespond (new Response (new ResponseOptions ({
body: {},
status: 404
})));
Я пишу модульные тесты для службы angular2. Фрагменты кода:
// 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
})));
my 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
}
Первое ожидание - это нормально, программа переходит в вызов карты, а не в catch. Но как мне получить код статуса 404? res.status имеет значение null.
работает для меня:
mockConnection.mockRespond (new Response (new ResponseOptions ({
body: {},
status: 404
})));
Чтобы получить ошибочную ошибку, вам нужно импортировать ResponseType из @ angular/http и включить тип ошибки в макетный ответ, а затем расширить Response и реализовать 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));
}
Переход исходного кода в node_modules\@angular\http\testing\mock_backend.d.ts
.
MockConnection.mockRespond
уже находится в вашем коде.
MockConnection.mockError
- это то, что вам может понадобиться.
Играйте с ним и посмотрите, что вы получите.
Для success
, error
и completed
callback
.subscribe
по observable
код
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
}