如何模拟AngularJS指令的控制器 [英] How to mock the Controller of an AngularJS Directive
本文介绍了如何模拟AngularJS指令的控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出具有外部控制器的指令:
Given a directive that has an external controller:
.directive('d1', function () {
return {
controller: 'd1controller',
restrict: 'E',
link: function ($scope, $element, $attributes, $controller) {
$controller.doStuff();
}
};
});
如何在 d1
指令的单元测试中模拟 d1controller
控制器?
How do I mock the d1controller
controller in the d1
directive's unit tests?
我的尝试:
我在模拟服务时尝试使用 $ provide
:
I tried with $provide
as when mocking a service:
beforeEach(module('app', function ($provide) {
ctrlMock = jasmine.createSpyObj('ctrlMock', ['doStuff']);
$provide.value('d1controller', ctrlMock );
}));
我还尝试了 $ controllerProvider
beforeEach(module('app', function ($controllerProvider) {
ctrlMock = jasmine.createSpyObj('ctrlMock', ['doStuff']);
$controllerProvider.register('d1controller', ctrlMock);
}));
推荐答案
我是OP.事实证明,使用 $ controllerProvider
是可行的.你必须给它传递一个构造函数.不是实例.
I'm the OP. It turns out that using $controllerProvider
works. You have to pass it a constructor; not an instance.
beforeEach(module('app', function ($controllerProvider) {
$controllerProvider.register('d1controller', function Mock(){
this.doStuff = function(){};
});
}));
这篇关于如何模拟AngularJS指令的控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文