У меня есть директива, которая прослушивает события нажатия клавиш для выполнения действий при нажатии клавиши ввода, и компонент, использующий его:
onEnter директива
@Directive({
selector: '[appOnEnter]'
})
export class OnEnterDirective {
@Output() enterPressed = new EventEmitter();
@HostListener('document:keydown', ['$event'])
onKeyPress(event: KeyboardEvent) {
if ((event.which === 13)) {
this.enterPressed.emit();
}
}
}
component.html
<div appOnEnter (enterPressed)=do()></div>
component.ts
export class Component {
next = new EventEmitter<null>();
do() {
this.next.emit();
}
}
Я пытаюсь проверить это с Жасмин, но событие, похоже, не вызвано.
component.spec.ts
it('if enter is pressed action should be taken', () => {
spyOn(component.next, 'emit');
const event = new KeyboardEvent('keypress', {
key: 'Enter'
});
fixture.detectChanges();
expect(component.next.emit).toHaveBeenCalled();
});
Компонент и директива работают нормально, единственная проблема - издеваться над вводом.