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

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

最佳答案

要模拟错误,您需要使用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 方法中指定的第二个回调中。

关于unit-testing - 使用 jasmine 进行 Angular 2 可观察错误测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36917719/

相关文章:

ionic-framework - Ionic Jasmine : env. stopOnSpecFailure 不是编译成功后的函数

angularjs - 需要一些 Jasmine 中 "callThrough"和 "callFake()"的实际示例

javascript - 如何测试 Javascript 是否提交了表单?

unit-testing - 通过 maven-surefire-plugin 测试我的项目时遇到问题

unit-testing - Android Studio + Spek 集成

javascript - Angular - 将更多项目加载到列表中

angular - 无法在我的 Angular 4 项目中导入 lodash.add

java - 验证所有方法调用中的 Collection 参数是否一起包含给定集合中的所有值

unit-testing - 两个公有方法调用一个私有(private)方法

javascript - Angular 4 异步数据存储