Как проверить, что в выпадающем списке выводятся только сотрудники с ролью руководителя?
Что проверяют
Видите ли вы в простом списке две проверки: нет лишних и нет пропавших. Интервьюер ждёт, что вы заглянете глубже интерфейса и спросите, откуда список берётся. Следом часто спрашивают, как это автоматизировать и что делать с длинным списком.
Как отвечать
Начните с уточнений: что считается ролью руководителя (атрибут в системе, а не слово в должности), бывает ли у человека несколько ролей, показываются ли уволенные и заблокированные, сотрудники других подразделений, сам текущий пользователь.
Тестовые данные с пограничными случаями:
- совмещение ролей: сотрудник, который одновременно руководитель, должен попасть в список;
- бывший руководитель: роль сняли, в списке его нет, в том числе после обновления кеша;
- деактивированный руководитель: поведение по требованиям, обычно скрыт;
- однофамильцы: одинаковое ФИО, различить их можно только по дополнительному полю.
Проверка идёт на трёх уровнях:
- база: SQL-запрос с условием на роль и активность даёт эталонный набор;
- API: ответ эндпоинта, из которого строится список, совпадает с эталоном. Если бэкенд отдаёт всех сотрудников, а фильтрует фронтенд, это отдельный баг: лишние данные уходят в браузер;
- интерфейс: список совпадает с ответом API, включая подгрузку при прокрутке и поиск внутри списка.
Последний шаг: отправить форму с идентификатором обычного сотрудника прямым запросом. Сервер должен отклонить его, а не сохранить.
В автотесте удобнее сравнивать множества идентификаторов из API и из базы. В UI-тесте на Selenium для нативного <select> есть класс Select с методом getOptions(), для кастомных списков нужны свои локаторы.
Где спотыкаются
Проверяют только отсутствие лишних. Список, где показаны два руководителя из десяти, такую проверку проходит.
Смотрят видимую часть списка и не прокручивают его до конца, хотя элементы подгружаются порциями.
Пишут проверку через assert в Java. Без флага -ea при запуске JVM он отключён, и тест не упадёт никогда. В тестах нужны assertEquals из JUnit или AssertJ.