我正在尝试通过模拟$http
来测试使用$httpBackend
服务的方法。我的方法在我的应用程序中正常工作,但我无法让测试工作。这是不起作用的测试代码(我没有得到任何结果,并且URL是正确的:
describe("authHelper", function() {
var webHelper;
var url;
var $httpBackend;
beforeEach(function(){
pingResponse = {
principal: null,
authenticated: false,
servlet:true,
timestamp:1468325333070
};
angular.mock.module('provisioning');
inject(function ($injector) {
webHelper = $injector.get('webHelper');
url = webHelper.buildUrl('/ping');
$httpBackend = $injector.get('$httpBackend');
$httpBackend.whenGET(webHelper.buildUrl('/ping')).respond(200, pingResponse);
});
});
it("should pass if setup is correct", inject(function(authHelper) {
expect(true).toBe(true);
console.log(url);
authHelper.isAuthenticated().then(
function(data){ alert(data); },
function(data){ alert(data); }
);
}));
以下是我正在测试的方法 - 当我在服务器上运行我的应用服务时,这种方法有效,但模拟无效。我有10个其他测试工作正常,但似乎无法让模拟工作。我看到控制台中记录的URL,但就是这样:
var isAuthenticated = function(){
var d = $q.defer();
$http.get(webHelper.buildUrl('/ping')).then(function(data){
console.log("isauth got");
console.log(data);
if(data.data.authenticated){
d.resolve(true);
} else {
d.resolve(false);
}
}, function(errorData){
console.log("Error");
console.log(errorData);
d.resolve(false);
});
return d.promise;
};
答案 0 :(得分:1)
在致电httpBackend.flush();
后,您需要致电authHelper.isAuthenticated()
来清除待处理的请求。
有关详细信息,请参阅Angular文档: https://docs.angularjs.org/api/ngMock/service/ $ httpBackend