【问题标题】:Angular 2 observable error testing with jasmine使用 jasmine 进行 Angular 2 可观察到的错误测试
【发布时间】:2016-08-23 09:32:55
【问题描述】:

我想测试一下这个功能:

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

【问题讨论】:

    标签: unit-testing angular jasmine observable


    【解决方案1】:

    要模拟错误,需要使用MockConnectionmockError 方法。它接受 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);
            (...)
    

    在这种情况下,您的数据流中会抛出一个错误,例如进入subcribe 方法中指定的第二个回调。

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 2018-12-11
      • 2017-04-06
      • 2019-06-19
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 2020-02-25
      相关资源
      最近更新 更多