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
Angularjs 如何剔除在对象构造期间调用的控制器方法_Angularjs_Jasmine_Spy - Fatal编程技术网

Angularjs 如何剔除在对象构造期间调用的控制器方法

Angularjs 如何剔除在对象构造期间调用的控制器方法,angularjs,jasmine,spy,Angularjs,Jasmine,Spy,我有一个AngularJs控制器,它在构造时调用自己的refresh()方法。该方法访问单元测试期间不存在的一些模板元素 function ListController($scope) { /// ... $scope.refresh = function() { var tabId = angular.element('#id li.active a').attr('href'); //etc } //Initialise

我有一个AngularJs控制器,它在构造时调用自己的
refresh()
方法。该方法访问单元测试期间不存在的一些模板元素

function ListController($scope) {
    /// ...

    $scope.refresh = function() {
        var tabId = angular.element('#id li.active a').attr('href');
        //etc
    }

    //Initialise
    $scope.refresh();
}
在构造控制器时,刷新方法会导致单元测试失败。由于它所做的工作与测试无关,我想用存根覆盖该方法,并简单地测试它是否已被调用


Jasmine的间谍功能看起来很有用,但在构建对象之前,我找不到为其设置间谍功能的方法。我该怎么做?

您应该将其移动到指令的链接函数。链接函数基本上是编译的结果,这样您就可以确定您的元素已编译并准备就绪,这将使“刷新”函数变得不必要。通常,您不应该从控制器通过jqLite或jQuery访问DOM。此外,链接功能还提供了对元素、范围和属性(甚至href)的直接访问,这很好。

谢谢。对于该特性来说,编写一个指令似乎有点过分,但重点是在控制器中进行DOM操作。以不同的方式重构它以避免单元测试问题。