aprok
aprok

Reputation: 1157

Unit testing angular.extend function with jasmine spyOn

I have a directive, where, in certain case I use

angular.extend(dist, src)

Now I would like to test this case and check, if angular.extend is called.

I'm trying to use spyOn

spyOn(angular, 'extend')

And then in test

expect(angular.extend).toHaveBeenCalled()

Not sure I can do it at all, but I decided to give it a try.

Thanks for any help.

EDIT:

Here is my test, edited in accordance with your advise.

it('should create new scope and extend config if config is passed to directive', function() {
    var spy = jasmine.createSpy('extendSpy').and.callThrough();
    angular.extend = spy;
    timeout.flush();
    _.forEach(scope.accordionConfig, function(configItem) {
        if (configItem.config) {
            expect(angular.extend).toHaveBeenCalled();
        }
    });
});

In beforeEach hook I don't have anything special, just assigning config, creating some other preparation for rest tests and compiling the directive.

Here is a snippet from link function which I'm trying to test

if (scope.format === 'directive') {
    if (scope.config) {
        newScope = $rootScope.$new();
        angular.extend(newScope, scope.config);
    }
    scope.content = $compile(scope.content)(newScope || scope);
}

Upvotes: 0

Views: 1309

Answers (1)

Oleg Belousov
Oleg Belousov

Reputation: 10121

console log the value of angular.extend before the assertion, it should be an instance of jasmine.spy, if it is not, there is a problem in the way that you create the spy, and we will need more context, perhaps your full code could help. I assume you create the hook somewhere in the beforeEach hook or on one of the other hooks?

Try the following code:

var spy = jasmine.createSpy('extendSpy').and.callThrough();
angular.extend = spy;
expect(spy).toBeCalledWith(dist, src);

Upvotes: 0

Related Questions