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

blu*_*tic 3 google-analytics jasmine angularjs karma-jasmine

我正在使用Karru + Jasmine在Grunt构建中为我的Angular应用程序进行一些单元测试.我有以下运行块代码来设置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');
Run Code Online (Sandbox Code Playgroud)

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

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

如果我完全删除该行,则错误消失,Jasmine测试继续正常.有任何想法吗?

akn*_*azi 7

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

var $rootScope, $window;

beforeEach(inject(function(_$rootScope_, _$window_) {
    $rootScope = _$rootScope_;
    $window = _$window_;
    $window.ga = function(){};
}));
Run Code Online (Sandbox Code Playgroud)