1

アプリケーションに保存された資格情報を使用してユーザーをログインさせ、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();

});

問題は、/practice/active の whenGET が 401 で一度呼び出された後に 200 で応答する必要があることです。そうしないと、輪になってしまいます。または、http インターセプターを完全に間違ってテストする方法を考えていますか?

4

1 に答える 1

3

このために、expectGET代わりにを使用しますwhenGETexpectGET一度に 1 つの要求のみを実行するため、要求が行われるたびに応答を変更できます。このようなもの:

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

});
于 2014-06-19T15:14:57.497 に答える