测试Angular http拦截器

时间:2014-06-19 14:30:28

标签: angularjs angularjs-http

我需要让我的应用程序使用已保存的凭据登录用户并在401上重试请求并且我很难测试它,因为我需要初始调用以返回401,但之后返回200登录请求再次发生。

到目前为止,这是我的测试:

it("should call login if the status is 401", function() {
  $httpBackend.whenGET(api.baseUrl + "/auth/login").respond(200);
  $httpBackend.whenGET(api.baseUrl + "/practice/active").respond(401);

  api.practiceActiveInquery(function(result) {
    expect(login.fn).toHaveBeenCalled();
  });

  $httpBackend.flush();

});

问题是我需要使用/练习/主动的whenGET在用401调用一次后用200响应,否则我会陷入一个圆圈。或者我在考虑如何测试一个完全错误的http拦截器?

1 个答案:

答案 0 :(得分:3)

为此,您希望使用expectGET代替whenGETexpectGET一次只能完成一个请求,因此您可以在每次发出请求时更改响应。像这样:

it("should call login if the status is 401", function() {
  $httpBackend.whenGET(api.baseUrl + "/auth/login").respond(200);
  $httpBackend.expectGET(api.baseUrl + "/practice/active").respond(401); //will return 401 the 1st time
  $httpBackend.expectGET(api.baseUrl + "/practice/active").respond(200); //will return 200 the 2nd time

  api.practiceActiveInquery(function(result) {
    expect(login.fn).toHaveBeenCalled();
  });

  $httpBackend.flush();

});