如果我有这样的指示
JS:
app.controller('MyController', function($scope) {
this.someMethod = function() {
};
});
app.directive('myDirective', function() {
return {
scope: true
link: function(scope, elem, attrs, controller) {
controller.someMethod();
}
controller: 'MyController',
}
});
我想创建一个Jasmine间谍来确保名为controller.someMethod
的链接函数,但这不起作用:
规格:
var elem = angular.element('<div my-directive></div>');
var scope = $rootScope.new();
$compile(elem)(scope);
var ctrl = elem.controller('myDirective');
spyOn(ctrl, 'someFunc').andCallThrough();
间谍创建太晚,因为控制器已实例化,并且在$compile
语句中调用了链接函数。
还有哪些方法可以监视链接功能中发生的事情?是否可以预先实例化控制器并将其传递给$compile
?
答案 0 :(得分:7)
来自AngularJS Developer Guide's page on Directives:
最佳实践:如果要将API公开给其他指令,请使用 controller 。 否则请使用链接。
我建议为someMethod()
创建服务。然后你可以模拟和监视该服务。否则你可能需要找一些其他迹象表明你想要发生的事实实际发生过。