angularjs - Angular 应用程序中 Google Analytics 的 Jasmine 测试出错

标签 angularjs google-analytics jasmine karma-jasmine

我正在 Grunt 构建中使用 Karma + Jasmine 为我的 Angular 应用程序进行一些单元测试。我有以下运行 block 代码来设置 Google Analytics:

run.$inject = ['$rootScope', '$state', '$location', '$auth', '$window', 'AUTH_EVENTS', 'AuthService', 'Permission'];

function run($rootScope, $state, $location, $auth, $window, AUTH_EVENTS, AuthService, Permission) {
    // Initialize Google Analytics for tracking page views w/ ui-router state changes
    $window.ga('create', 'UA-XXXXXXXX-X', 'auto');

运行 grunt test 时,我从 $window.ga(.. 行收到以下错误:

TypeError: 'undefined' is not a function (evaluating '$window.ga('create', 'UA-XXXXXXX-X', 'auto')')

如果我完全删除该行,错误就会消失,并且 Jasmine 测试会继续正常进行。有什么想法吗?

最佳答案

我们在 karma.conf.js 文件中提供了 Jasmine 使用的所有 JavaScript 文件来加载依赖项。由于 Jasmine 找不到在analytics.js 中定义的 ga 函数,因此您未定义。为了避免此错误,您可能需要像下面这样模拟它

var $rootScope, $window;

beforeEach(inject(function(_$rootScope_, _$window_) {
    $rootScope = _$rootScope_;
    $window = _$window_;
    $window.ga = function(){};
}));

关于angularjs - Angular 应用程序中 Google Analytics 的 Jasmine 测试出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36321371/

相关文章:

c# - 如何在 ASP.NET 中使用 Google Analytics?

python - 尝试使用 Measurement Protocol 将数据发送到 Google Analytics

angularjs - 在 google map api v3 和 angularJS 上点击鼠标获取坐标

javascript - AngularJS 表单验证不起作用,显示空表单

regex - AngularJS忽略字符串中的空格

angular - 将模拟 DOM 事件传递给 Angular 中的组件方法以进行单元测试

node.js - 将 jasmine.spyOn 用于 Mongoose 模式方法

javascript - 一页上的angularjs多个 Controller

google-analytics - 自定义 Google Analytics session 结束

javascript - 我怎样才能像这样为 Angular Controller 和服务编写 Jasmine 测试?