我有一个使用服务的指令:
MyDirective = (myService) ->
compile: () ->
stuff = myService.getStuff()
MyDirective.$inject = ['MyService']
app = A.module 'myApp'
app.directive 'myDirective', MyDirective
我希望能够测试myService.getStuff是否被调用。
对于我对控制器的测试,我能够做到:
angular.mock.inject ($controller) ->
myController = $controller 'MyController',
$scope: $scope
mockMe: mockMethod: () ->
assert.ok()
done()
如果我与我的指令类似,我会收到以下错误:
angular.mock.inject ($directive) ->
myDirective = $directive 'MyDirective',
$scope: $scope
myService: getStuff: () ->
assert.ok()
done()
Error: Unknown provider: $directiveProvider <- $directive
我有什么想法可以获得对该指令的引用并将mocks注入其中?
在我正在做的所有测试之前:
angular.mock.module 'myApp'
我已经能够通过指令解决这个问题 - &gt;控制器 - &gt;服务而非指令 - &gt;服务。这是推荐的解决方案吗? e.g
$scope.getStuff = (name, success) ->
assert.ok true
done()
$_compile(elm) $scope
$scope.$digest()
答案 0 :(得分:2)
这就是你在谈论的吗?
var scope, element;
angular.mock.inject(function ($compile, $rootScope) {
scope = $rootScope;
element = $compile('<my-directive />')(scope);
scope.$digest();
});
您可以在此处对scope
进行更改,再次致电$digest()
,以查看element
中反映的更改。如果myDirective
通过注入依赖服务myService
您想要模拟,则需要在拨打inject()
之前执行此类操作:
module('moduleWithDirective', function ($provide) {
$provide.provider('myService', {
$get: function () {
return { /* service goes here. */ };
}
});
});