Angular 2 使用 jasmine 进行可观察到的错误测试
Angular 2 observable error testing with jasmine
我想测试这个功能:
register(): void {
let user: User = new User();
user.username = this.username.value;
user.email = this.email.value;
user.password = this.password.value;
this._authService.register(user)
.map(rsp => rsp.json())
.subscribe((response) => { //
this._router.parent.navigate(["Login"]); //
}, (error) => {
this.responseError = JSON.parse(error._body).message;
}, () => {
this._authService.login(user)
.map(rsp => rsp.json())
.subscribe((data: any) => { //
this._authService.handleSuccessLogin(data, user);
this._router.parent.navigate(["../Game"]);
});
});
}
我的 _authService
使用 http,但我想伪造那个调用。我试图通过它调用并模拟 http,但即使我的响应是 4xx 它 运行 在成功部分。有没有可能以某种方式测试错误部分?
要模拟错误,需要使用MockConnection
的mockError
方法。它接受 Error
对象作为参数,而不是 Response
对象。为了能够提供状态代码等提示,您可以像这样扩展 Error
class:
class ResponseError extends Error {
status: number;
(...)
}
并这样使用它:
it('Should return something', inject([XHRBackend, HttpService, Injector], (mockBackend, httpService, injector) => {
mockBackend.connections.subscribe(
(connection: MockConnection) => {
if (connection.request.url === 'file1.json') {
var err = new ResponseError();
err.status = 404;
connection.mockError(err);
(...)
在这种情况下,错误会在您的数据流中抛出并进入例如 subcribe
方法中指定的第二个回调。
我想测试这个功能:
register(): void {
let user: User = new User();
user.username = this.username.value;
user.email = this.email.value;
user.password = this.password.value;
this._authService.register(user)
.map(rsp => rsp.json())
.subscribe((response) => { //
this._router.parent.navigate(["Login"]); //
}, (error) => {
this.responseError = JSON.parse(error._body).message;
}, () => {
this._authService.login(user)
.map(rsp => rsp.json())
.subscribe((data: any) => { //
this._authService.handleSuccessLogin(data, user);
this._router.parent.navigate(["../Game"]);
});
});
}
我的 _authService
使用 http,但我想伪造那个调用。我试图通过它调用并模拟 http,但即使我的响应是 4xx 它 运行 在成功部分。有没有可能以某种方式测试错误部分?
要模拟错误,需要使用MockConnection
的mockError
方法。它接受 Error
对象作为参数,而不是 Response
对象。为了能够提供状态代码等提示,您可以像这样扩展 Error
class:
class ResponseError extends Error {
status: number;
(...)
}
并这样使用它:
it('Should return something', inject([XHRBackend, HttpService, Injector], (mockBackend, httpService, injector) => {
mockBackend.connections.subscribe(
(connection: MockConnection) => {
if (connection.request.url === 'file1.json') {
var err = new ResponseError();
err.status = 404;
connection.mockError(err);
(...)
在这种情况下,错误会在您的数据流中抛出并进入例如 subcribe
方法中指定的第二个回调。