我正在测试指令的控制器,该指令的范围在指令定义对象中设置为false。来自'父'控制器的方法是从指令控制器调用的 - 我无法存根这个方法,因为我无法从我的指令控制器的测试文件中访问它 - 处理这种情况的最佳方法是什么?
非常感谢。
答案 0 :(得分:0)
您可以预先定义已知方法并将其设置为angular.noop
:
function ChildController() {
var _this = this;
_this.parentMethod1 = angular.noop;
_this.parentMethod2 = angular.noop;
_this.childMethod = function() {
// do some stuff
};
}
然后,您可以在init
期间调用的子项上创建link
方法,如果父项存在,则使用父方法替换方法:
// directive definition
.directive('myDirective', function myDirective() {
return {
bindToController: true,
controller: ChildController,
controlelrAs: 'childController',
require: ['childController', '^parentController'],
scope: false,
link: function (scope, element, attributes, controllers) {
// controllers[0] = childController
// controllers[1] = parentController
controllers[0].init(controllers[1]);
}
};
});
// child controller
function ChildController() {
// ...same as above...
_this.init = function(parentController) {
_this.parentMethod1 = parentController.parentMethod1;
_this.parentMethod2 = parentController.parentMethod2;
};
}
您还可以使用.controller
定义控制器,以使测试更简单(无需使用模拟parentController
创建指令)。但这应该得到你所描述的。