У меня есть функция, которая запускается через keydown.enter
и фокусируется на следующем доступном элементе, однако я не могу заставить тест принять мой поддельный KeyboardEvent ...
@ViewChild('btnOne') btnOne: ElementRef<HTMLInputElement>;
@ViewChild('btnTwo') btnTwo: ElementRef<HTMLInputElement>;
myFunct(evt: KeyboardEvent) {
const next = <HTMLElement>evt.srcElement.nextElementSibling;
next.focus();
}
Тест:
it('Should shift focus from btnOne to btnTwo', () => {
const b1 = component.btnOne.nativeElement;
const b2 = component.btnTwo.nativeElement;
const button2 = {nodeName:'BUTTON'}
const button1 = {nodeName:'BUTTON', nextElementSibling: button2};
const evtObj = {'code': 'Enter', srcElement: button1);
const kbEvent = new KeyboardEvent('keydown.enter', evtObj);
focusSpy = spyOn(b2, 'focus'); // Spy on focus for 2nd button to be focused
b1.focus(); // Manually apply focus to 1st button so it will progress from here
component.myFunct(kbEvent); // I get the failures here (see below)
expect(b2.focus).toHaveBeenCalled();
});
Ошибка теста с сообщением:
Ошибка типа: невозможно прочитать свойство 'nextElementSibling' с нулевым значением
Я также распечатал evt
как видно из теста в самой функции:
KeyboardEvent {isTrusted: false}
Я искал проблему isTrusted
и обнаружил этот вопрос , но я не смог решить мою проблему с их ответом ...