Ответ 1
Если вам просто нужно какое-то тестирование при запуске и уловке событий, вот как я это делаю. Для обеспечения того, чтобы определенное событие было запущено ($emit
-ed или $broadcast
-ed), шпион - это путь. Вам нужна ссылка на область, которая будет вызывать $emit
или $broadcast
, а затем просто сделать что-то вроде этого:
spyOn(scope, "$emit")
//run code to test
expect(scope.$emit).toHaveBeenCalledWith("MY_EVENT_ID", other, possible, args);
Если вам не нужно или не нужно беспокоиться о аргументах, переданных с помощью $emit
, вы можете поместить $on
в $rootScope
и установить флаг, чтобы знать, что событие было выпущено, Что-то вроде этого:
var eventEmitted = false;
$rootScope.$on("MY_EVENT_ID", function() {
eventEmitted = true;
});
//run code to test
expect(eventEmitted).toBe(true);
Для тестирования функциональности, выполняемой при обнаружении события ($on
), это немного проще. Просто получите $rootScope
из функции inject
и отправьте нужное событие.
$rootScope.$broadcast("EVENT_TO_TEST", other, possible, args);
//expects for event here
Теперь я полагаю, что эта обработка событий будет происходить в директиве или контроллере (или и том и другом). Для настройки директивных тестов см. https://github.com/vojtajina/ng-directive-testing. Для настройки тестов контроллера см. https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L27
Надеюсь, что это поможет.