首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用$httpBackend / Karma测试$httpBackend的POST错误状态?

如何使用$httpBackend / Karma测试$httpBackend的POST错误状态?
EN

Stack Overflow用户
提问于 2014-06-27 20:11:59
回答 1查看 3.6K关注 0票数 2

我试图为我的角服务编写一个单元测试,下面是服务中的一个函数:

代码语言:javascript
复制
login = function(authObject) {
  deferred = $q.defer();

  $http({
    url: '/api/v1/session/create',
    method: 'POST',
    data: authObject
  }).success(function(response) {
    var user;
    if (response.status === 'ok' && response.user && response.authenticated === true) {
      user = response.user;
    }
    return deferred.resolve(response);
  }).error(function(data) {
    deferred.reject(data);
    return $state.go('api_error');
  });
  return deferred.promise;
};

我可以通过这样的方法成功地测试success案例:

代码语言:javascript
复制
it('should go to the api error state', function() {
  var authObject;
  authObject = {
    username: 'a@b.com',
    password: 'c'
  };
  $httpBackend.expectPOST('/api/v1/session/create').respond(someData);

  userService.login(authObject).then(function(response) {
    return console.log("not error", response);
  }, function(response) {
    return console.log("error", response);
  });
  return expect($state.go).toHaveBeenCalledWith('api_error');
});

但是,如果我这样做了:$httpBackend.expectPOST('/api/v1/session/create').respond(500, 'error');,那么错误大小写就不会被调用。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-27 21:19:47

为了调用.then()错误回调,链中的先前承诺应该导致错误(例如抛出异常)或被拒绝。

返回500将导致调用login()方法中的error回调,但由于该回调既不会引发错误,也不会被拒绝,因此将不会调用链接的错误回调。

例如改变:

代码语言:javascript
复制
}).error(function(data) {
    deferred.reject(data);
    return $state.go('api_error');
});

至:

代码语言:javascript
复制
}).error(function(data) {
    return deferred.reject(data);
    //return $state.go('api_error');
});

会起作用的(但它不能做你想做的事:D)。

我不太熟悉ui-router,但在这种情况下,$state.go()可能会中止当前的执行链,因此我不确定以下操作是否有效:

代码语言:javascript
复制
}).error(function(data) {
    $state.go('api_error');
    return deferred.reject(data);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24460071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档