2015-09-01 2 views
2

Как вы тестируете угловой контроллер с использованием внешней библиотеки, например, отслеживание событий Google Analytics. Например:Угловое тестирование JS с внешней библиотекой, такой как Google Analytics

$scope.showVolumn = function() { 
    ga('send', { 
    'hitType': 'event',   
    'eventCategory': 'Volume', 
    'eventAction': 'click',  
    'eventLabel': 'Interaction' 
    }); 

    if($scope.native !== 'true') 
    vm.showVolumnCtl = !vm.showVolumnCtl; 
}; 

Run думал, что мой тестовый код этой ошибки appeard

ReferenceError: Can't find variable: ga

Я не думаю, что вы можете вводить га в правой beforeEach?

ответ

5

Как ga является глобальным, он прикреплен к объекту window, поэтому вы используете $window как в своем приложении, так и в ваших тестах.

Просто введите $window, а затем назовите его так.

$window.ga('send', { 
    'hitType': 'event',   
    'eventCategory': 'Volume', 
    'eventAction': 'click',  
    'eventLabel': 'Interaction' 
    }); 

Это будет работать точно так же, как и у вас. В ваших тестах просто добавьте $window и издевайтесь над ним, как вам нравится.

Быстрый пример:

beforeEach(inject(function (_$window_) { 
    $window = _$window_; 
    $window.ga = function(){}; //mock as you need 
})); 
+1

Tick сразу Мастер Nobita :) – Bruce

+1

рад, что это было полезно. Как связанное примечание, после использования Analytics самостоятельно в приложении, когда у меня есть какой-либо глобальный, я теперь всегда использую '$ window' для ввода его в мои контроллеры/службы/ecc. Как вы видите, это делает тестирование довольно тривиальным, и он чувствует себя намного больше, чем явно, требуя * зависимости, а не молча ожидая, что он будет там/с неба. И, кстати, спасибо за «Мастера», я польщен. – Nobita

+0

haha ​​mate вы по-настоящему помогли :) – Bruce

Смежные вопросы