我有一个AngularJs控制器在构造时调用自己的refresh()
方法。所讨论的方法访问在单元测试期间不存在的一些模板元素。
function ListController($scope) {
/// ...
$scope.refresh = function() {
var tabId = angular.element('#id li.active a').attr('href');
//etc
}
//Initialise
$scope.refresh();
}
刷新方法导致单元测试在构造控制器时失败。由于它所做的工作与测试无关,我想用存根覆盖该方法,并简单地测试它已被调用。
Jasmine的间谍功能看起来像是要走的路,但我找不到在构造对象之前设置一个对象的方法。我该怎么做?
答案 0 :(得分:0)
您应该将其移至指令的链接功能。链接函数基本上是编译的结果,所以你肯定知道你的元素已经编译好了,这将使你的“刷新”函数变得不必要。通常,您不应该通过控制器中的jqLite或jQuery访问DOM。此外,链接函数提供对元素,范围和属性(甚至href)的直接访问,这很好。