Модульное тестирование KeyboardEvent, возвращающее «isTrusted: false» и «Не удается прочитать свойство« nextElementSibling »из null» - PullRequest
0 голосов
/ 31 января 2019

У меня есть функция, которая запускается через 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 и обнаружил этот вопрос , но я не смог решить мою проблему с их ответом ...

...