我的指令看起来像这样:
angular.module('myApp', [])
.directive('myDirective', function(){
return {
link: function(scope, element, attr, controller) {
scope.$watch('data', function(newValue, oldValue) {
$timeout(function() {
if (newValue !== oldValue) {
console.log('data Changed!');
}
});
},true);
scope.$watch('myCtrl.search', function(newValue, oldValue) {
$timeout(function() {
if (newValue !== oldValue) {
console.log('myCtrl.search Changed!');
}
});
},true);
}
};
});
我可以更改data
值并在单元测试中触发$watch
:
scope.data = "new data";
scope.$digest();
但是如何更改myCtrl.search
值呢?我尝试使用scope.myCtrl.search = "new search"
并返回错误Cannot set property 'search' of undefined
答案 0 :(得分:0)
myCtrl
指令执行, ng-controller=MyController as myCtrl
附加到作用域。由于这是一个单元测试,你需要模拟myCtrl。
在您执行的测试设置中
scope = $rootScope.$new()
还要添加
scope.myCtrl={};
设置虚拟变量(控制器)