Питання на співбесіді з Cypress з відповідями
End-to-end і компонентне тестування на Cypress: черга команд і повтори, селектори й дії, перевірки, аліаси, cy.intercept і фікстури, cy.session і вхід, власні команди й задачі, ізоляція тестів і дані, CI, паралельний запуск, нестабільні тести й архітектура набору.
228 запитань для співбесіди з теми Cypress з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.
- Повтори
- cy.intercept
- cy.session
- Власні команди
- CI
Запитання за рівнями
Junior
Базові поняття та синтаксис · 50 запитань
Middle
Практика, нюанси й оптимізація · 50 запитань
Senior
Архітектура, внутрішня будова, edge cases · 50 запитань
Приклади запитань
Кілька запитань із кожного рівня з правильною відповіддю й поясненням.
Cypress · Junior
- Де виконуються тести Cypress?
Показати відповідь
Правильна відповідь: У браузері, поруч із застосунком, що тестується
Cypress запускає код тестів у тому самому циклі браузера, що й застосунок, а поруч працює процес Node.js для файлів і проксіювання мережі. Тому він може напряму читати стан застосунку.
- Яка команда відкриває інтерактивний застосунок Cypress?
Показати відповідь
Правильна відповідь:
npx cypress opencypress openзапускає застосунок, де ви обираєте браузер і spec та дивитеся, як ідуть тести.cypress runзапускає тести без інтерфейсу, як у CI. - Яка команда запускає всі тести Cypress без інтерфейсу, наприклад у CI?
Показати відповідь
Правильна відповідь:
npx cypress runcypress runзапускає кожен spec у терміналі, робить скриншоти падінь і повертає ненульовий код виходу при падіннях. - Де зазвичай задають основну конфігурацію Cypress?
Показати відповідь
Правильна відповідь: У
cypress.config.tsчиcypress.config.jsКонфіг задає
baseUrl, шаблони spec-файлів, viewport, таймаути, повтори й обробники подій Node черезdefineConfig.
Cypress · Middle
- У Cypress 12+ чим відрізняються запити (queries) від команд-дій?
Показати відповідь
Правильна відповідь: Запити на кшталт
getповторюються; дії на кшталтclick- разЗапити перезапускаються, доки перевірки не пройдуть. Дії на кшталт
.click()чи.type()не повторюються, хоча спершу чекають придатності елемента. - Що повторюється в
cy.get('.list').find('li').should('have.length', 3)?Показати відповідь
Правильна відповідь: Увесь ланцюжок запитів перед перевіркою
З Cypress 12 невдала перевірка перезапускає ланцюжок пов'язаних запитів, тож нові відрендерені елементи знаходяться.
- Що робить
.its('length')?Показати відповідь
Правильна відповідь: Бере властивість subject, з повторами
.its()- запит, тожcy.get('li').its('length').should('be.gt', 2)повторюється..invoke()викликає метод subject. - Як перевірити тіло, яке форма надсилає в API?
Показати відповідь
Правильна відповідь: Перехопити запит і перевірити
interception.request.bodyЦе ловить баги фронтенду на кшталт неправильних назв чи типів полів, які замоканий бекенд тихо прийняв би.
Cypress · Senior
- Який головний архітектурний компроміс того, що Cypress працює всередині браузера?
Показати відповідь
Правильна відповідь: Прямий доступ до застосунку, але одна вкладка й правила origin
Робота в браузері дає подорож у часі, доступ до застосунку й надійні очікування. Ціна - контроль однієї вкладки, обмеження origin і тести лише на JavaScript.
- Коли команді обрати Cypress, а не Playwright?
Показати відповідь
Правильна відповідь: Коли важливий інтерактивний раннер, а застосунок вкладається в обмеження
Cypress сильний для JS-команд з одним застосунком, яким потрібен швидкий фідбек у раннері. Потреби в кількох вкладках, origin чи мовах - на користь Playwright.
- Чому Cypress потребує
cy.originдля SSO, а Playwright - ні?Показати відповідь
Правильна відповідь: Cypress працює в сторінці одного origin і має явно змінювати контекст
Playwright керує браузером ззовні, тож origin не важливий. Cypress працює в сторінці, тож іншим origin потрібен окремий контекст виконання.
- Яка найчастіша першопричина нестабільних тестів Cypress у великих наборах?
Показати відповідь
Правильна відповідь: Спільний стан і припущення про час
Більшість flaky походить із залежності тестів одне від одного, від реального часу чи спільних даних бекенду. Лагодьте причину; повтори її лише ховають.
Задачі на код
Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід на JavaScript (debounce, deepClone, Promise.all, LRU-кеш), на TypeScript (дженерики, звуження й утилітні типи, перевіряє справжній компілятор), серверна логіка на Node.js (middleware, обмеження частоти, черги задач), SQL-запити в справжньому PostgreSQL і на React: компоненти й хуки на кшталт списку справ, вкладок, useDebounce та useInterval.
Відкрити задачі →