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

Angularjs Angular应用程序中Google Analytics的Jasmine测试出错,angularjs,google-analytics,jasmine,karma-jasmine,Angularjs,Google Analytics,Jasmine,Karma Jasmine,我正在为我的Angular应用程序进行一些单元测试,在Grunt构建中使用Karma+Jasmine。我有以下设置Google Analytics的运行块代码: run.$inject = ['$rootScope', '$state', '$location', '$auth', '$window', 'AUTH_EVENTS', 'AuthService', 'Permission']; function run($rootScope, $state, $location, $auth,

我正在为我的Angular应用程序进行一些单元测试,在Grunt构建中使用Karma+Jasmine。我有以下设置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测试时
我从
$window.ga(..
行)得到以下错误:

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

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

我们提供了Jasmine在karma.conf.js文件中用于加载依赖项的所有JavaScript文件。由于Jasmine找不到analytics.js中定义的ga函数,因此您可能无法定义。为了避免此错误,您可以想像下面这样嘲笑它吗

var $rootScope, $window;

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

我想这样做的缺点是,我必须为每个测试文件模拟它。谢谢你的回答。相反,你可以在karma的配置文件中的文件[…]下包含googleanalytics.js作为依赖项,我已经在karma的配置文件中包含了googleanalytics.js,还尝试了上面的代码,但仍然出现错误“$window.ga不是函数”@akniazi