← Усі теми

Питання на співбесіді з тестування з відповідями

Jest і Vitest, React Testing Library, моки та MSW, Playwright і Cypress, піраміда тестів: що, як і на якому рівні тестувати.

228 запитань для співбесіди з теми Тестування з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.

Запитання за рівнями

Приклади запитань

Кілька запитань із кожного рівня з правильною відповіддю й поясненням.

Тестування · Junior

  1. Яка головна мета автоматичних тестів?

    Правильна відповідь: Дати впевненість, що код працює і працюватиме далі після змін

    Тести можуть показати наявність багів, але не їхню відсутність. Їхня цінність - швидкий зворотний зв'язок і безпечний рефакторинг: якщо поведінка зламалася, тест упаде раніше, ніж помітять користувачі.

  2. Що перевіряє unit-тест?

    Правильна відповідь: Невеликий ізольований фрагмент коду - функцію, хук або компонент - сам по собі

    Unit-тести швидкі й точно вказують місце поломки. Їхнє обмеження: вони не показують, чи працюють частини разом.

  3. Що перевіряє інтеграційний тест?

    Правильна відповідь: Що кілька модулів правильно працюють разом - наприклад, форма з валідацією та запитом до API

    У фронтенді інтеграційний тест зазвичай рендерить фічу цілком (кілька компонентів, стан, роутер) і мокає лише мережеву межу.

  4. Що таке end-to-end (E2E) тест?

    Правильна відповідь: Тест, який керує справжнім застосунком у браузері, як користувач, - через UI, API та базу даних

    E2E-тести дають найбільше впевненості, але вони повільніші й крихкіші. Типові інструменти - Playwright і Cypress.

Усі 78 запитань з відповідями →

Тестування · Middle

  1. Чим відрізняються findBy… і waitFor?

    Правильна відповідь: findBy чекає на появу одного елемента; waitFor повторює будь-який колбек, доки той не перестане кидати помилку

    findByRole(...) - це буквально waitFor(() => getByRole(...)). Щоб дочекатися елемента, беріть findBy, для інших перевірок - waitFor.

  2. Як дочекатися зникнення індикатора завантаження?

    Правильна відповідь: await waitForElementToBeRemoved(() => screen.queryByRole("progressbar"))

    Хелпер вимагає, щоб елемент був на місці на початку, і чекає, доки запит не поверне null.

  3. Що зазвичай означає попередження «An update to Component inside a test was not wrapped in act(...)»?

    Правильна відповідь: Стан змінився після того, як тест перестав чекати, - наприклад, запит завершився після останньої перевірки

    RTL уже обгортає render і події в act. Зазвичай виправлення - дочекатися фінального стану UI через findBy/waitFor, а не додавати act вручну.

  4. Як протестувати поле пошуку з debounce?

    Правильна відповідь: Увімкнути фейкові таймери, ввести текст, просунути час на затримку debounce і перевірити запит/результат

    Фейкові таймери роблять тест швидким і детермінованим. Реальні очікування сповільнюють набір і однаково дають гонки.

Усі 75 запитань з відповідями →

Тестування · Senior

  1. Як вирішити, на який рівень піраміди/трофея поставити тест?

    Правильна відповідь: На найнижчий рівень, який усе ще ловить потрібну поломку з достатньою впевненістю

    Якщо баг ловиться unit- чи інтеграційним тестом, дублюючий E2E-тест лише додає вартості. E2E - для того, чого не бачать нижчі рівні: реальні зв'язки, деплой, сторонні інтеграції.

  2. Чому стаття Google «Just Say No to More End-to-End Tests» застерігає від ставки на E2E?

    Правильна відповідь: Падіння E2E приходять пізно, їх важко локалізувати, і вони часто нестабільні - зворотний зв'язок виходить слабким

    Хороші тести швидкі, надійні й локалізують помилку. Набір з одних E2E провалюється за всіма трьома пунктами.

  3. Що таке «testing honeycomb» і де його застосовують?

    Правильна відповідь: Форма для мікросервісів: переважно інтеграційні тести сервісу через його API, мало unit-тестів деталей реалізації й мало інтегрованих тестів

    Модель Spotify пасує сервісам, чия складність - у взаємодіях, а не у внутрішній логіці.

  4. На чому засновані «розміри тестів» Google (small, medium, large)?

    Правильна відповідь: На ресурсах, які тест може використовувати: small - один процес без I/O; medium - одна машина, localhost; large - будь-що, включно з віддаленими системами

    Розміри описують обмеження, які роблять тести швидкими й детермінованими, - незалежно від суперечок про назви «unit/інтеграційний».

Усі 75 запитань з відповідями →

Збірні тести з цією темою

Запитання з кількох тем одразу - як на співбесіді на конкретну вакансію.

Задачі на код

Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід: debounce, throttle, deepClone, Promise.all, EventEmitter, LRU-кеш та інші.

Відкрити задачі →