Питання на співбесіді з тестування з відповідями
Jest і Vitest, React Testing Library, моки та MSW, Playwright і Cypress, піраміда тестів: що, як і на якому рівні тестувати.
228 запитань для співбесіди з теми Тестування з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.
- Jest
- Vitest
- Testing Library
- Mocks
- Playwright
- Cypress
Запитання за рівнями
Junior
Базові поняття та синтаксис · 50 запитань
Middle
Практика, нюанси й оптимізація · 50 запитань
Senior
Архітектура, внутрішня будова, edge cases · 50 запитань
Приклади запитань
Кілька запитань із кожного рівня з правильною відповіддю й поясненням.
Тестування · Junior
- Яка головна мета автоматичних тестів?
Правильна відповідь: Дати впевненість, що код працює і працюватиме далі після змін
Тести можуть показати наявність багів, але не їхню відсутність. Їхня цінність - швидкий зворотний зв'язок і безпечний рефакторинг: якщо поведінка зламалася, тест упаде раніше, ніж помітять користувачі.
- Що перевіряє unit-тест?
Правильна відповідь: Невеликий ізольований фрагмент коду - функцію, хук або компонент - сам по собі
Unit-тести швидкі й точно вказують місце поломки. Їхнє обмеження: вони не показують, чи працюють частини разом.
- Що перевіряє інтеграційний тест?
Правильна відповідь: Що кілька модулів правильно працюють разом - наприклад, форма з валідацією та запитом до API
У фронтенді інтеграційний тест зазвичай рендерить фічу цілком (кілька компонентів, стан, роутер) і мокає лише мережеву межу.
- Що таке end-to-end (E2E) тест?
Правильна відповідь: Тест, який керує справжнім застосунком у браузері, як користувач, - через UI, API та базу даних
E2E-тести дають найбільше впевненості, але вони повільніші й крихкіші. Типові інструменти - Playwright і Cypress.
Тестування · Middle
- Чим відрізняються
findBy…іwaitFor?Правильна відповідь:
findByчекає на появу одного елемента;waitForповторює будь-який колбек, доки той не перестане кидати помилкуfindByRole(...)- це буквальноwaitFor(() => getByRole(...)). Щоб дочекатися елемента, берітьfindBy, для інших перевірок -waitFor. - Як дочекатися зникнення індикатора завантаження?
Правильна відповідь:
await waitForElementToBeRemoved(() => screen.queryByRole("progressbar"))Хелпер вимагає, щоб елемент був на місці на початку, і чекає, доки запит не поверне
null. - Що зазвичай означає попередження «An update to Component inside a test was not wrapped in act(...)»?
Правильна відповідь: Стан змінився після того, як тест перестав чекати, - наприклад, запит завершився після останньої перевірки
RTL уже обгортає
renderі події вact. Зазвичай виправлення - дочекатися фінального стану UI черезfindBy/waitFor, а не додаватиactвручну. - Як протестувати поле пошуку з debounce?
Правильна відповідь: Увімкнути фейкові таймери, ввести текст, просунути час на затримку debounce і перевірити запит/результат
Фейкові таймери роблять тест швидким і детермінованим. Реальні очікування сповільнюють набір і однаково дають гонки.
Тестування · Senior
- Як вирішити, на який рівень піраміди/трофея поставити тест?
Правильна відповідь: На найнижчий рівень, який усе ще ловить потрібну поломку з достатньою впевненістю
Якщо баг ловиться unit- чи інтеграційним тестом, дублюючий E2E-тест лише додає вартості. E2E - для того, чого не бачать нижчі рівні: реальні зв'язки, деплой, сторонні інтеграції.
- Чому стаття Google «Just Say No to More End-to-End Tests» застерігає від ставки на E2E?
Правильна відповідь: Падіння E2E приходять пізно, їх важко локалізувати, і вони часто нестабільні - зворотний зв'язок виходить слабким
Хороші тести швидкі, надійні й локалізують помилку. Набір з одних E2E провалюється за всіма трьома пунктами.
- Що таке «testing honeycomb» і де його застосовують?
Правильна відповідь: Форма для мікросервісів: переважно інтеграційні тести сервісу через його API, мало unit-тестів деталей реалізації й мало інтегрованих тестів
Модель Spotify пасує сервісам, чия складність - у взаємодіях, а не у внутрішній логіці.
- На чому засновані «розміри тестів» Google (small, medium, large)?
Правильна відповідь: На ресурсах, які тест може використовувати: small - один процес без I/O; medium - одна машина, localhost; large - будь-що, включно з віддаленими системами
Розміри описують обмеження, які роблять тести швидкими й детермінованими, - незалежно від суперечок про назви «unit/інтеграційний».
Збірні тести з цією темою
Запитання з кількох тем одразу - як на співбесіді на конкретну вакансію.
Задачі на код
Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід: debounce, throttle, deepClone, Promise.all, EventEmitter, LRU-кеш та інші.
Відкрити задачі →