Мне никогда не приходилось проверять свои директивы angularjs раньше, а также директивы, которые я написал для моей текущей компании, использует события для передачи директив директивам и службам.Единичное тестирование передачи сигналов директив 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');
});
});
Update Об изменении на входе,
<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'? Вне директивы? –
yep, 'searchbox-valuechanged' транслируется с использованием $ rootScope, поэтому' $ rootScope' - единственная зависимость, а директивы полностью развязаны. –
Что вызывает трансляцию? Вы должны повторить это в своем тестовом коде – Phil