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

时间:2013-08-07 13:37:56

标签: angularjs jasmine spy

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

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

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

    //Initialise
    $scope.refresh();
}

刷新方法导致单元测试在构造控制器时失败。由于它所做的工作与测试无关,我想用存根覆盖该方法,并简单地测试它已被调用。

Jasmine的间谍功能看起来像是要走的路,但我找不到在构造对象之前设置一个对象的方法。我该怎么做?

1 个答案:

答案 0 :(得分:0)

您应该将其移至指令的链接功能。链接函数基本上是编译的结果,所以你肯定知道你的元素已经编译好了,这将使你的“刷新”函数变得不必要。通常,您不应该通过控制器中的jqLit​​e或jQuery访问DOM。此外,链接函数提供对元素,范围和属性(甚至href)的直接访问,这很好。