Issue
I have a service MyService with a function using the ga()
event tracking call which I want to test:
angular.module('myModule').factory('MyService', [function() {
var myFunc = function() {
ga('send', 'event', 'bla');
// do some stuff
}
return {
myFunc: myFunc
}
]);
My spec file looks like this:
describe('The MyService', function () {
var MyService,
ga;
beforeEach(function () {
module('myModule');
ga = function() {};
});
beforeEach(inject(function (_MyService_) {
MyService = _MyService_;
}));
it('should do some stuff', function () {
MyService.myFunc();
// testing function
});
});
Running my tests always gives me:
ReferenceError: Can't find variable: ga
Solution
The problem is global scope of ga
.
The ga
variable that you create inside your tests has a local scope and will not be visible to your own service.
By using a global variable (ga
) you have made unit testing difficult.
The current option would be to either create a angular service to wrap ga
and use that everywhere else. Such service can be mocked too.
The other option is to override the global ga
. But this will have side effects.
window.ga=function() {}
Answered By - Chandermani
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.