getByPlaceholderText — это метод из библиотеки React
Testing Library, предназначенный для поиска элементов формы по значению
атрибута placeholder. Он используется преимущественно для
работы с <input> и <textarea>, где
placeholder задаёт подсказку пользователю.
Синтаксис:
const element = screen.getByPlaceholderText(text, options);
placeholder.{ exact: true }.Метод возвращает один элемент и выбрасывает ошибку, если элемент не
найден или найдено несколько совпадений. Для безопасного поиска без
выброса ошибки используют queryByPlaceholderText.
import { render, screen } from '@testing-library/react';
import LoginForm from './LoginForm';
render(<LoginForm />);
const usernameInput = screen.getByPlaceholderText('Введите имя пользователя');
expect(usernameInput).toBeInTheDocument();
В этом примере getByPlaceholderText находит поле ввода
по точному тексту placeholder. Метод полезен при тестировании форм, где
placeholder фиксирован и уникален.
const passwordInput = screen.getByPlaceholderText(/пароль/i);
expect(passwordInput).toHaveAttribute('type', 'password');
Регулярные выражения позволяют искать элементы с частичным совпадением текста или без учёта регистра.
getByPlaceholderText и
queryByPlaceholderTextnull, если элемент не найден. Используется для тестов на
отсутствие компонента или условное рендеринг.const emailInput = screen.queryByPlaceholderText('Электронная почта');
expect(emailInput).toBeNull();
В компонентах, где поля формы создаются динамически, placeholder
может быть изменяемым. В таких случаях рекомендуется использовать
регулярные выражения или параметры exact: false:
const dynamicInput = screen.getByPlaceholderText(/имя/i, { exact: false });
expect(dynamicInput).toBeInTheDocument();
Опция exact: false позволяет искать элементы, текст
placeholder которых содержит указанную подстроку.
getByPlaceholderTextgetByPlaceholderText часто комбинируется с
пользовательскими событиями для имитации ввода данных:
import userEvent from '@testing-library/user-event';
const input = screen.getByPlaceholderText('Введите имя пользователя');
userEvent.type(input, 'Алексей');
expect(input).toHaveValue('Алексей');
Этот подход позволяет проверить корректность обработки пользовательского ввода и связывания данных с состоянием компонента.
Для тестирования поведения формы при вводе данных
getByPlaceholderText используется совместно с ассерциями,
проверяющими ошибки или состояние формы:
const emailInput = screen.getByPlaceholderText('Электронная почта');
userEvent.type(emailInput, 'невалидныйemail');
userEvent.click(screen.getByText('Отправить'));
expect(screen.getByText('Введите корректный email')).toBeInTheDocument();
Такой подход позволяет тестировать реакцию компонента на неправильные
значения без прямого обращения к элементам по id или
class.
Часто getByPlaceholderText применяется вместе с
getByRole или getByLabelText для более точного
контроля над тестами:
const input = screen.getByPlaceholderText('Пароль');
const submitButton = screen.getByRole('button', { name: /войти/i });
userEvent.type(input, '123456');
userEvent.click(submitButton);
expect(screen.getByText('Добро пожаловать')).toBeInTheDocument();
Такой подход улучшает читаемость теста и снижает зависимость от структуры DOM.
getByPlaceholderText удобно сочетать с
userEvent для симуляции ввода и проверки состояния
компонента.queryByPlaceholderText.getByPlaceholderText — инструмент, который позволяет
делать тесты форм простыми, читаемыми и точными, особенно в сочетании с
другими методами поиска и пользовательскими событиями. Он идеально
подходит для тестирования инпутов и текстовых областей, где placeholder
служит важным идентификатором элемента.