如何在AngularJS中使用Jasmine测试$ interval

时间:2016-12-07 10:45:06

标签: angularjs karma-jasmine

我有一个服务Home并在其中,我有selectInterval函数,如下所示:

Home.selectInterval = function () {
    var interval = $interval(function () {
        if (angular.element('.ui-select-toggle').length > 0) {
            angular.element('.ui-select-toggle').bind('click', function () {
                if (angular.element('.ui-select-choices-row').length > 0) {
                    angular.element('.ui-select-choices-group').mCustomScrollbar();
                }
            });
            $interval.cancel(interval);
        }
    }, 50);
};

现在我正在测试它:

  it('selectInterval() should be called.', function () {
    Home.selectInterval();
    $interval.flush(50);
    $rootScope.$apply();
    expect(Home.selectInterval).toHaveBeenCalled();
    // need to test $interval as well
});

我想测试是否调用了函数,并且$ interval工作正常。现在它给了我这个错误。

Some of your tests did a full page reload!

1 个答案:

答案 0 :(得分:1)

我不确定此测试是否是导致您的问题的原因。每当我看到该错误时,都是因为有一些代码正在更改URL。设置$window.location.href$location.path('/new-path')之类的东西会导致phantomjs浏览器执行页面重新加载,而现在没有任何支持可以处理。

如果您发现这是问题所在,您只需要尝试窥探方法,它就永远不会实际调用它。这特别适用于$location.path('/new-path')