我有一个棘手的功能,我想监视。
var GlobalAlertsController = function() {
}
这是指角度控制器
var GlobalAlertsController = function() {
this.updateHeight = function (clientHeight) {
$rootScope.AlertsGlobal.clientHeight = clientHeight;
}
像这样......
require: 'MainGlobalAlerts',
该函数存在于指令控制器内,并且是另一个控制器所需要的(单元测试需要不同吗?)。
html = angular.element("<my-directive> </my-directive")
element = $compile(html)($rootScope)
$rootScope.$digest(element)
scope = element.scope() // note html and scope are defined below describe
在我的单元测试中,我嘲笑了我的指令
sinon.spy(scope, 'updateHeight')
sinon.spy($rootScope, 'updateHeight')
我试图通过几种不同的方式来窥探这个 updateHeight()。
Typeerror: Attempted to wrap undefined property updateHeight as a function
然而我的错误陈述
.navigation li {
display:inline-block;
vertical-align: middle;
text-decoration:none;
}
由于 updateHeight 是用这个来定义的,所以如果我不能窥探它,我不知道如何调用这个方法。
答案 0 :(得分:1)
控制器实例(this
)在范围内不可用,必须通过controller
method检索,具体如下:
element = $compile('<my-directive>')($scope)
var controllerInstance = element.controller('myDirective');
sinon.spy(controllerInstance, 'updateHeight');
为了能够通过$scope
到达控制器实例,请在指令中使用controllerAs语法。它提供了更好的可测试性,除了常规控制器的优点外。