使用jasmine进行Angular 2可观察错误测试

时间:2016-04-28 14:30:30

标签: unit-testing angular jasmine observable

我想测试这个功能:

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,它也会在成功部分上运行。是否有可能以某种方式测试错误部分?

1 个答案:

答案 0 :(得分:2)

要模拟错误,您需要使用mockError的{​​{1}}方法。它接受MockConnection对象作为参数而不是Error对象。为了能够提供状态代码等提示,您可以扩展Response类,如下所示:

Error

并以这种方式使用它:

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); (...) 方法中指定的第二个回调。