intermediate
Arrange, Act, Assert и deterministic tests
Структурируйте intent, контролируйте time и randomness, изолируйте side effects и делайте failures reproducible вместо intermittent.
Arrange-Act-Assert структурирует тест: подготовка данных и зависимостей, выполнение поведения, проверка результата — по возможности один логический act на тест. Детерминированные тесты дают один и тот же результат: fake timers, фиксированные seed для random, stub UUID, без реальной сети и sleep с гонками.
Flaky тесты подрывают доверие — карантин, исправление причины или удаление, а не бесконечные retries.
На интервью: разбор flaky (timing, shared state, порядок) и AAA-рефакторинг.
Типовые ошибки: несколько несвязанных assert скрывают причину; `setTimeout` без стратегии ожидания; глобальные mutable фикстуры.
Компромисс — строгая изоляция против реалистичного async — документируйте, зачем нужны ожидания.
Чеклист:
- Один явный Act на тест.
- Заморозка времени и randomness на границах.
- Воспроизведите flake локально до merge retries.