Angularjs 如何剔除在对象构造期间调用的控制器方法
我有一个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
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操作。以不同的方式重构它以避免单元测试问题。