Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
使用Jasmine在angularJs中进行单元测试:模拟无限递归函数_Angularjs_Unit Testing_Jasmine_Spyon - Fatal编程技术网

使用Jasmine在angularJs中进行单元测试:模拟无限递归函数

使用Jasmine在angularJs中进行单元测试:模拟无限递归函数,angularjs,unit-testing,jasmine,spyon,Angularjs,Unit Testing,Jasmine,Spyon,我正在尝试使用Jasmine一个控制器进行单元测试,该控制器具有一个无限递归函数,我在创建控制器时调用该函数,如下所示: angular.module('myApp') .controller('LargeHomeCtrl', ['$scope', '$timeout', function ($scope, $timeout) { //some code to be tested function updateInfo () { //do some thin

我正在尝试使用
Jasmine
一个控制器进行单元测试,该控制器具有一个无限递归函数,我在创建控制器时调用该函数,如下所示:

angular.module('myApp')
.controller('LargeHomeCtrl', ['$scope', '$timeout', 
    function ($scope, $timeout) {

    //some code to be tested

    function updateInfo () {
    //do some things
        $timeout(updateInfo(), 8000);
    }

    updateInfo();
}]);
但是我不能像下面的代码那样为单元测试注入此控制器,否则我会出现以下错误:

WARN [PhantomJS 1.9.8 (Linux)]: Disconnected (1 times), because no message in 10000 ms.

beforeEach(inject(function ($controller, _$rootScope_) {
    spyOn($controller, 'updateInfo').and.returnValue(null);
    $scope = _$rootScope_;
    $ctrl = $controller('LargeHomeCtrl', {
        $scope: $scope
    });
}));
我没有看到任何其他模拟函数的方法,但是如果在控制器注入之前定义它,我会得到一个错误(
updateInfo()方法不存在),因为控制器尚未注入

我试图用spyOn模仿我的functon updateInfo(),如下所示:

spyOn($controller, 'updateInfo').and.returnValue(null);
我缺少一些基本的东西(我是茉莉花的新手)?
我能做什么?

你确定你想要这样的递归吗?或者您只是希望每隔8秒执行一次
updateInfo
?我认为应该从$timeout中删除额外的函数调用:
$timeout(updateInfo,8000)(删除括号)。这不是jasmine的问题-Angular在应用程序中实例化此控制器时也会遇到问题。您是对的,在这种特殊情况下,我可以使用setTimeout,它工作正常,谢谢!但是我以后可能需要用一个类似的函数运行一个测试,但是,不,Angular似乎在实例化这个控制器时没有问题。是的,它确实存在-请看,但要小心-您的浏览器可能会冻结一段时间。无论您是否在Jasmine中启动此控制器,都存在无限递归。