angular.module('myModule', ['somedeps'])
.directive('myAwesomeDirective', myAwesomeDirectiveFn)
function myAwesomeDirectiveFn() {
function myAwesomeDirectiveCtrl (someDeps) {
var vm = this;
vm.variable_x, vm.variable_y;
vm.action_a = function action_a() {
console.log("Yaaa, I am action a");
}
},
function myAwesomeLinker(scope, element, attribute, controller) {
//Just print something on console
element.on('click', function () {
controller.action_a();
});
}
return {
restrict : 'AE',
scope : {
x : '=',
y : '='
},
controller : myAwesomeDirectiveCtrl,
controllerAs : 'vm',
link : myAwesomeLinker,
templateUrl : 'someTemplate.html'
}
}
现在我想写一个单元测试来测试我的指令和控制器。
我通过以下方式获得指令
directiveElement = angular.element('<my-awesome-directive x = "x" y = "y" />');
var vm = $rootScope.$new();
vm.x = 10;
vm.y = 20;
directiveElement = $compile(directiveElement)(vm);
vm.$digest();
我的理解是我可以通过以下方式获得控制器
controller = directiveElement.controller('myAwesomeDirective');
但是控制器仍未定义。
我做错了什么或完全错了?我想用控制器封装我的指令。我不想在模块上创建任何控制器。
答案 0 :(得分:1)
只需写下
$compile(directiveElement)(vm);
并且不要将结果分配给directiveElement
。
另请参阅stackoverflow上this question的答案。