我需要让我的应用程序使用已保存的凭据登录用户并在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拦截器?
答案 0 :(得分:3)
为此,您希望使用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();
});