我正在尝试使用Jasmine模拟http超时。我创建了一个Angular HTTPInterceptor
angular.module('coreErrorHandler')
.factory('HTTPTimeoutInterceptorService', function($rootScope, $q, AppConfig) {
return {
'request': function(config) {
config.timeout = 2000;
return config;
}
};
});
我已将服务添加到$ httpProvider
$httpProvider.interceptors.push('HTTPTimeoutInterceptorService');
代码100%工作,我只是不确定如何使用Jasmine进行测试。
it('should wait for the timeout to elapse and issue an HTTP timeout error', function() {
$httpBackend.when("GET", "http://google.com").respond({});
var httpGetValue = $http.get("http://google.com");
setTimeout(function(){
$timeout.flush();
console.log(httpGetValue);
expect(SOMETHING).toEqual(false);
}, 2100);
});
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
此处无需使用setTimeout
,您必须将参数传递给$timeout.flush()
以模拟时间已过去多长时间。
it('should wait for the timeout to elapse and issue an HTTP timeout error', function() {
$httpBackend.when("GET", "http://google.com").respond({});
var httpGetValue = $http.get("http://google.com");
$timeout.flush(2100); // specify how long to simulate here
console.log(httpGetValue);
expect(SOMETHING).toEqual(false);
});
另见:$timeout in ngMock documentation
希望这有帮助。