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

标签 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();
    }

    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 的内置时钟功能来计算所需的时间量。

关于javascript - 在 AngularJS 单元测试中断言递归 $timeout 中的 http 调用次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29059012/

相关文章:

javascript - 如何将变量更改为数组中的下一个字符串

javascript - 如何在 Jest 中禁用 Babel 集成?

javascript - 如何将 JSON 插入到 zope chameleon 模板的脚本标签中?

javascript - 动态更改输入字段的视觉顺序的简单方法(不更改表单 HTML)?

javascript - 如何 stub Node.js MongoDB 链式 fn 调用来模拟我的最终结果?

asp.net-mvc - 读取 RedirectToRouteResult 的 RouteValues 字典

javascript - 图像按钮在悬停时改变位置

javascript - 将多组单选按钮值存储到对象 angularjs 中(不使用 jQuery)

javascript - jquery中如何获取div的值?

perl - 如何模拟 Perl 的内置反引号运算符?