Методы querySelector и querySelectorAll
являются важными инструментами для работы с DOM в JavaScript. Эти методы
позволяют искать элементы на странице по CSS-селекторам, что значительно
упрощает процесс выбора нужных элементов для тестирования. В контексте
тестирования с Jest, правильное использование этих методов критично для
успешных и эффективных тестов взаимодействия с DOM.
querySelector:
выбор одного элементаМетод querySelector позволяет найти первый элемент в
документе, который соответствует указанному CSS-селектору. Он возвращает
этот элемент, если он найден, или null, если таких
элементов нет. Это полезно, когда требуется работать с единственным
элементом на странице.
Пример использования:
const button = document.querySelector('.submit-button');
Здесь button будет ссылаться на первый элемент с классом
submit-button. Если такой элемент не существует в DOM,
метод вернет null. Этот метод является предпочтительным в
тех случаях, когда на странице ожидается только один элемент с заданным
селектором.
null.querySelectorAll:
выбор всех элементовМетод querySelectorAll возвращает коллекцию всех
элементов, которые соответствуют указанному селектору. Коллекция не
является массивом, но имеет большинство свойств, характерных для
массивов, таких как forEach. В отличие от
querySelector, который возвращает только один элемент,
querySelectorAll предоставляет все подходящие элементы.
Пример использования:
const buttons = document.querySelectorAll('.submit-button');
В этом примере переменная buttons будет содержать
коллекцию всех элементов с классом submit-button. Если
таких элементов несколько, метод вернет их все. Если элементы не
найдены, будет возвращена пустая коллекция.
forEach, но для некоторых случаев может понадобиться
преобразовать коллекцию в массив с помощью
Array.from().Когда речь идет о тестировании в Jest, эти методы часто используются
для имитации взаимодействия с элементами на странице. Например, можно
использовать querySelector и querySelectorAll,
чтобы находить кнопки, поля ввода, ссылки и другие элементы для проверки
их состояния или выполнения действий (например, клик).
querySelector:test('should display submit button', () => {
document.body.innerHTML = `
<button class="submit-button">Submit</button>
`;
const button = document.querySelector('.submit-button');
expect(button).not.toBeNull();
expect(button.textContent).toBe('Submit');
});
В этом тесте мы используем querySelector, чтобы найти
кнопку с классом submit-button, а затем проверяем, что она
существует и содержит текст “Submit”.
querySelectorAll:test('should have two submit buttons', () => {
document.body.innerHTML = `
<button class="submit-button">Submit</button>
<button class="submit-button">Submit</button>
`;
const buttons = document.querySelectorAll('.submit-button');
expect(buttons.length).toBe(2);
});
Здесь с помощью querySelectorAll мы находим все кнопки с
классом submit-button и проверяем, что их количество равно
2.
Когда использовать
querySelector:
Когда использовать
querySelectorAll:
Отсутствие элементов: Если метод
querySelector или querySelectorAll не находит
элементов, важно понимать, что возвращаемое значение будет либо
null, либо пустая коллекция. Это следует учитывать при
написании тестов, чтобы избежать ошибок.
Использование асинхронных методов: Иногда
элементы могут быть динамически добавлены на страницу после того, как
тест уже начал выполняться. В таких случаях следует использовать
асинхронные методы Jest, такие как waitFor, чтобы дождаться
появления элементов перед проверкой.
Пример асинхронного теста:
test('should load submit button asynchronously', async () => {
document.body.innerHTML = '<div id="container"></div>';
setTimeout(() => {
document.getElementById('container').innerHTML = '<button class="submit-button">Submit</button>';
}, 100);
await waitFor(() => document.querySelector('.submit-button'));
const button = document.querySelector('.submit-button');
expect(button).not.toBeNull();
expect(button.textContent).toBe('Submit');
});
Здесь используется waitFor, чтобы дождаться появления
кнопки перед её проверкой.
Методы querySelector и querySelectorAll
являются мощными инструментами для работы с DOM в JavaScript, и их
правильное использование является неотъемлемой частью написания
эффективных тестов с Jest. Они позволяют точно и гибко искать элементы
на странице, что важно при тестировании интерфейсов и взаимодействий в
веб-приложениях.