hgc*_*rpd 7 unit-testing jasmine angularjs
如果我有这样的指示
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',
}
});
Run Code Online (Sandbox Code Playgroud)
我想创建一个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();
Run Code Online (Sandbox Code Playgroud)
间谍创建得太晚,因为控制器已实例化并且$compile
语句中调用了链接函数.
还有哪些方法可以监视链接功能中发生的事情?是否可以预先实例化控制器并将其传递给$compile
?
最佳实践:当您希望将API公开给其他指令时,请使用控制器.否则使用链接.
我建议为任何事情创建一个服务someMethod()
.然后你可以模拟和监视该服务.否则你可能需要找一些其他迹象表明你想要发生的事实实际发生了.