Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS单元测试中断言递归$timeout中的http调用数_Javascript_Angularjs_Unit Testing_Recursion_Timeout - Fatal编程技术网

Javascript 在AngularJS单元测试中断言递归$timeout中的http调用数

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

我目前有一个递归函数,用于轮询网页并重试非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重试次数进行单元测试

我不知道你想用$timeout.flush()做什么?我会使用jasmine的内置时钟功能向前拨所需的时间。

我正在调用$timeout.flush()来刷新在我的实现中定义的$timeout服务中的延迟。我看了一下Jasmine clock的功能,计时仍然给我带来了同样的问题,因为它只适用于setInterval和setTimeout,而不适用于AngularJS的$timeout服务-