Я создал директиву, которая прослушивает событие и обновляет его содержание следующим образом:Модульного тестирования angularjs директива прислушиваясь к событию
$rootScope.$on(event, function(e, msg) {
vm.items = msg.data;
});
Я хотел создать модульный тест для этого, я знаю, как я могу проверить если директива вещает, но я не знаю, как проверять эту директиву.
Вот как я могу проверить, если директива слушает:
describe('input directive', function() {
var ctrl,
$rootScope;
beforeEach(function() {
module('hey.ui');
inject(function($compile, _$rootScope_) {
$rootScope = _$rootScope_;
var elem = $compile('<m-search></m-search>')($rootScope.$new());
$rootScope.$digest();
ctrl = elem.controller('mSearch');
spyOn($rootScope, '$broadcast');
})
});
it('broadcasts e:input-valuechanged on change', function() {
var inputVal = {input: 'input string'};
ctrl.onChange(inputVal);
expect($rootScope.$broadcast).toHaveBeenCalledWith('e:input-valuechanged', {data: inputVal});
});
});
Я думал очень глупый способ тестирования, например, так:
describe('list directive', function() {
var ctrl,
$rootScope;
beforeEach(function() {
module('hey.ui');
inject(function($compile, _$rootScope_) {
$rootScope = _$rootScope_;
var elem = $compile('<ecal-list></ecal-list>')($rootScope.$new());
$rootScope.$digest();
ctrl = elem.controller('mList');
spyOn($rootScope, '$broadcast');
})
});
it('should listen to $broadcast', function() {
$rootScope.$broadcast('e:input-valuechanged');
var eventEmitted = false;
$rootScope.$on('e:input-valuechanged', function() {
eventEmitted = true;
console.log(eventEmitted);
});
//run code to test
expect(eventEmitted).toBe(true);
});
});
Как проверить, если директива слушает конкретное событие?