Javascript 在AngularJS单元测试中断言递归$timeout中的http调用数
我目前有一个递归函数,用于轮询网页并重试非200响应:Javascript 在AngularJS单元测试中断言递归$timeout中的http调用数,javascript,angularjs,unit-testing,recursion,timeout,Javascript,Angularjs,Unit Testing,Recursion,Timeout,我目前有一个递归函数,用于轮询网页并重试非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
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重试次数进行单元测试 我不知道你想用$timeout.flush()做什么?我会使用jasmine的内置时钟功能向前拨所需的时间。我正在调用$timeout.flush()来刷新在我的实现中定义的$timeout服务中的延迟。我看了一下Jasmine clock的功能,计时仍然给我带来了同样的问题,因为它只适用于setInterval和setTimeout,而不适用于AngularJS的$timeout服务-