Тестовый фокус на HTML-элементе в Jasmine

#angular #jasmine #karma-jasmine

#angular #jasmine #карма-жасмин

Вопрос:

У меня есть страница, на которой указан список элементов (изначально 5), а затем кнопка «Загрузить больше» при активации загрузит еще 5 элементов в списке. С точки зрения доступности я работаю над настройкой фокуса на вновь загруженный контент при активации кнопки «Загрузить больше». Я смог придумать логику, чтобы заставить фокус работать. Я просто хочу написать модульный тест, чтобы убедиться, что вызывается метод фокусировки и фокус установлен на правильном элементе.

Вот моя функция, которая устанавливает фокус:

 setFocusOnList(listLength: number) {
   // Set dynamic focus on the newly loaded card when activating Load more button
    if(listLength %5 === 0) {
      this.index = listLength - 5;
    }
    else {
      this.index = listLength - listLength %5;
    }
    setTimeout(() => {
      const wrapperDiv = document.querySelector('#entity-wrapper-'   this.index) as HTMLElement;
      if (wrapperDiv) {
        wrapperDiv.focus();
      }
    });
  }
 

К сожалению, это весь код, которым я могу поделиться. Я не могу понять, как протестировать метод фокусировки с помощью Jasmine. Любая помощь приветствуется!

Ответ №1:

Вы можете вызвать событие фокусировки на элементе с помощью dispatchEvent .

 /*
Your implementation goes here
*/
let loadMore = fixture.nativeElement.querySelector('#loadmore'); // user your element id
loadMore.dispatchEvent(new Event('focus'));
fixture.detectChanges(); // to detect the changes
/*
Your expectations goes here
*/ 

См.: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent

Комментарии:

1. Мой HTML-элемент, который я пытаюсь выбрать, выглядит следующим образом: <div class=»entity-wrapper» *ngFor=»пусть элементы списка; пусть i = index» id=»entity-wrapper-{{ i }}» tabindex=»-1″> Всякий раз, когда я пытаюсь выбратьэтот элемент и вызов метода фокусировки, я получаю NULL, поскольку выбранный элемент равен null.

2. пожалуйста, убедитесь, что у вас есть значения в вашем списке.