Don*_*uwe 3 unit-testing google-analytics google-analytics-api jasmine angularjs
我有一个服务MyService,其功能使用ga()要测试的事件跟踪调用:
angular.module('myModule').factory('MyService', [function() {
var myFunc = function() {
ga('send', 'event', 'bla');
// do some stuff
}
return {
myFunc: myFunc
}
]);
Run Code Online (Sandbox Code Playgroud)
我的规格文件如下所示:
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
});
});
Run Code Online (Sandbox Code Playgroud)
运行测试始终可以为我提供:
ReferenceError:找不到变量:ga
问题是的全球范围ga。
ga您在测试内部创建的变量具有局部作用域,并且对您自己的服务不可见。
通过使用全局变量(ga),使单元测试变得困难。
当前的选择是创建一个角度服务以包装ga并在其他地方使用。这样的服务也可以被嘲笑。
另一种选择是覆盖global ga。但这会产生副作用。
window.ga=function() {}
在尝试不同的解决方案后,我终于用下面的代码修复了。
beforeAll( ()=> {
// (<any>window).gtag=function() {} // if using gtag
(<any>window).ga=function() {}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2680 次 |
| 最近记录: |