Выбор ответа Middle Тестирование обновлено
Почему тест флаки
Вопрос
E2E-тест иногда падает в CI, локально проходит всегда. Какое исправление правильное?
await page.click('text=Сохранить');
await page.waitForTimeout(500);
const text = await page.textContent('.toast');
expect(text).toBe('Сохранено');
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ждать условия: expect(locator('.toast')).toHaveText(...). Фиксированная пауза угадывает время ответа сервера: в медленном CI 500 мс не хватает.
Варианты ответа
- Увеличить
waitForTimeoutдо 3000, чтобы CI успевал - Перезапускать упавший тест до трёх раз и считать его зелёным
- Запускать e2e только локально, где тест стабилен
- Ждать условия:
expect(locator('.toast')).toHaveText(...)правильный ответ
Разбор
Фиксированная пауза угадывает время ответа сервера: в медленном CI 500 мс не хватает. Web-first проверка Playwright сама повторяет попытки до таймаута и проходит, как только тост появился.
- Пауза в 3 секунды замедлит тест и всё равно не гарантирует успех.
- Ретраи маскируют проблему, их используют как временную меру и с отчётом о флаки.
- Отказ от e2e в CI убирает проверку, а не причину.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.