Мне никогда раньше не приходилось тестировать мои директивы angularjs, а директивы, которые я написал для моей нынешней компании, используют события для передачи директив директивам и службам.
И поэтому я написал директиву, например. директива поиска.
<m-search />
Эта директива транслирует событие "searchbox-valuechanged"
и ключ, теперь мне нужно написать для него тесты.
'use strict';
describe('<m-search>', function() {
beforeEach(module('hey.ui'));
var rootScope;
beforeEach(inject(function($injector) {
rootScope = $injector.get('$rootScope');
spyOn(rootScope, '$broadcast');
}));
it("should broadcast something", function() {
expect(rootScope.$broadcast).toHaveBeenCalledWith('searchbox-valuechanged');
});
});
Обновить При изменении ввода
<input class="m-input m-input--no-border" type="search" placeholder="Search"
ng-model="ctrl.searchValue"
ng-model-options="{debounce: 100}"
ng-change="ctrl.onChange({search: ctrl.searchValue})">
Он вызывает метод в контроллере директивы
vm.onChange = function (searchValue) {
$rootScope.$broadcast('searchbox-valuechanged', {data: searchValue});
};
Как протестировать вещание?
searchbox-valuechanged
? Вне директивы? - person Michael Benford   schedule 18.05.2015searchbox-valuechanged
передается с использованием $rootScope, поэтому$rootScope
является единственной зависимостью, а директивы полностью отделены друг от друга. - person Joey Hipolito   schedule 18.05.2015'ng-change="ctrl.onChange({search: ctrl.searchValue})">' +
, который является частью шаблона, а в контроллере директив вызывает ctrl.onChange - person Joey Hipolito   schedule 18.05.2015