I have exactly the same issue. If you found a solution I would be very
grateful to hear it!
On Thursday, 1 May 2014 11:53:26 UTC+1, Magnús Örn Gylfason wrote:
>
> Given the following directive:
>
> angular('ngTestLib').directive('test', function(TestService) {
> return {
> restrict: 'A',
> link: function(scope, elem, attrs, controller) {
> TestService.serve(function() {
> console.log('element in directive:', elem);
> elem.addClass('test');
> });
> }
> };
> });
>
> And the following unit test:
>
> describe('Testing test directive', function () {
> var element, scope, serviceMock;
>
> beforeEach(function() {
> angular.module('ngTestMock', [])
> .service('TestService', function() {
> serviceMock= this;
> this.serve=function(h) {
> serviceMock.handler= h;
> };
> });
>
> angular.module('Test', ['ngTestLib', 'ngTestMock'])
> });
>
> beforeEach(module('Test'));
>
> var template= '<div test></div>';
>
> function compile(template) {
> inject(function($compile, $rootScope) {
> var linkingFn = $compile(template);
> element= linkingFn($rootScope.$new());
> scope= element.isolateScope();
> });
> };
>
> it('should call addClass', function() {
> compile(template);
> console.log('element in spec:', element);
> spyOn(element, 'addClass');
> console.log('element in spec:', element);
> serviceMock.handler();
> expect(element.addClass).toHaveBeenCalled();
> });
>
> });
>
> I get the following output when running the unit test:
>
> LOG: 'element in spec:', Object{0: <div test="" class="ng-scope"></div>,
> length: 1} // element
> LOG: 'element in spec:', Object{0: <div test="" class="ng-scope"></div>,
> length: 1, addClass: function () { ... }} // spy added
> LOG: 'element in directive:', Object{0: <div test=""
> class="ng-scope"></div>, length: 1} // no spy present in the directive
> PhantomJS 1.9.7 (Mac OS X) Testing test directive should call addClass
> FAILED
> Expected spy addClass to have been called.
> PhantomJS 1.9.7 (Mac OS X): Executed 8 of 8 (1 FAILED) (0.033 secs / 0.062
> secs)
>
> For some reason the spy I'm putting on the element in the spec file does
> not exists on the element object in the directive. Can anyone see what I'm
> doing wrong? Why are the two elements not the same object?
>
> mg
>
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.