我目前有一个递归函数,可以轮询网页并重试非200响应:
app.service('PingService', function($q, $http, $timeout) {
var timer = null;
var deferred = $q.defer();
function ping() {
var url = 'http://www.google.com';
function successCallback() {
deferred.resolve();
}
function retry(accountName) {
timer = $timeout(ping, 2000);
}
$http.get(url).success(successCallback).error(retry);
}
return {
pingUrl: function() {
ping();
return defer.promise;
}
}
为了测试这个实现,我目前在jasmine中进行了以下测试:
it('should retry on non 200 response', function() {
$httpBackend.whenGET('http://www.google.com').respond(504);
PingService.pingUrl();
$httpBackend.flush();
$timeout.flush(4001);
$httpBackend.flush(2);
}
不幸的是,这没有通过,因为队列中似乎只有1个http请求,而不是我期望的经过时间的2个。
对我来说,使用$ timeout的递归函数对一段时间内进行的http重试次数进行单元测试吗?
答案 0 :(得分:-1)
我不知道你在尝试用$ timeout.flush()做什么?我会使用jasmine的内置时钟功能来勾选所需的时间。