2

меня есть служба MyService с функцией с помощью ga() событий отслеживания вызова, который я хочу, чтобы тест:Как издеваются Google Analytics функции вызова га()

angular.module('myModule').factory('MyService', [function() { 

    var myFunc = function() { 
     ga('send', 'event', 'bla'); 
     // do some stuff 
    } 

    return { 
     myFunc: myFunc 
    } 
]); 

Мой файл спецификации выглядит следующим образом:

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 
    }); 
}); 

Запуск мои тесты всегда дает мне:

ReferenceError: Can't find variable: ga

+0

Если вы хотите протестировать услугу, вы не должны использовать транспортир. Транспортир предназначен для разработки и запуска * сквозных тестов *, тестирования вашего приложения в целом с точки зрения пользователя в браузере. – alecxe

+0

Извините, я, конечно, говорю об модульном тестировании - изменил мой текст – DonJuwe

+1

ga определен внутри функции, не является глобальным. Попробуйте с window.ga = function() {} – fantarama

ответ

4

Проблема заключается в глобальном масштабе ga.

Переменная, которую вы создаете внутри своих тестов, имеет локальную область действия и не будет видна вашей собственной службе.

Используя глобальную переменную (ga), вы затруднили тестирование устройства.

Текущий вариант заключается в том, чтобы создать угловое обслуживание для обертывания ga и использовать его везде. Такую услугу можно издеваться.

Другой вариант - переопределить глобальный ga. Но это будет иметь побочные эффекты.

window.ga=function() {}

+0

спасибо, есть способ шпиона или перехвата каким-то образом на глобальном var? – DonJuwe

+1

Вы можете попробовать 'spyOn (window, 'ga');' – Chandermani

+0

То же самое для dataLayer'window.dataLayer = { push: function() {} } ' – joshy

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