Тестирование Angular 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 из /practice/active, чтобы ответить 200 после того, как он был вызван один раз с 401, иначе я попаду в круг. Или я совершенно неправильно думаю о том, как протестировать http-перехватчик?


person Justin    schedule 19.06.2014    source источник


Ответы (1)


Для этого вы хотите использовать expectGET вместо whenGET. expectGET выполняет только один запрос за раз, поэтому вы можете изменить ответ каждый раз, когда делается запрос. Что-то вроде этого:

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();

});
person dnc253    schedule 19.06.2014