Testing AngularJS directives that directly consume services -
i have directive makes use of service:
mydirective = (myservice) -> compile: () -> stuff = myservice.getstuff() mydirective.$inject = ['myservice'] app = a.module 'myapp' app.directive 'mydirective', mydirective i want able test myservice.getstuff called.
for tests controllers, have been able do:
angular.mock.inject ($controller) -> mycontroller = $controller 'mycontroller', $scope: $scope mockme: mockmethod: () -> assert.ok() done() if similar directive, following error:
angular.mock.inject ($directive) -> mydirective = $directive 'mydirective', $scope: $scope myservice: getstuff: () -> assert.ok() done() error: unknown provider: $directiveprovider <- $directive any ideas how can reference directive , inject mocks in it?
before tests doing:
angular.mock.module 'myapp' i have been able solve going directive -> controller -> service rather directive -> service. recommended solution? e.g
$scope.getstuff = (name, success) -> assert.ok true done() $_compile(elm) $scope $scope.$digest()
is you're talking about?
var scope, element; angular.mock.inject(function ($compile, $rootscope) { scope = $rootscope; element = $compile('<my-directive />')(scope); scope.$digest(); }); from here can make changes scope, call $digest() again see changes reflected in element. if mydirective relies on service myservice via injection you'd mock, need before call inject():
module('modulewithdirective', function ($provide) { $provide.provider('myservice', { $get: function () { return { /* service goes here. */ }; } }); });
Comments
Post a Comment