Тестируй наблюдаемое поведение и важные риски, а не внутреннюю «кухню» ради coverage.
Чеклист
Имя = сценарий + исход.
Падение должно быть диагностируемым.
Контролируй nondeterministic границы.
Чисти мутированное состояние после теста.
Реальные коллабораторы — если быстрые и стабильные; mock — только где изоляция даёт ценность.
Ожидаемые значения — явные; не дублируй прод-логику, чтобы «посчитать expected».
// Плохо: expected из той же функции, что и SUTexpect(normalize(input)).toEqual(normalize(input));
// Хорошо: зафиксированный контрактexpect(normalize(" Ada ")).toBe("ada");
Итог
Хороший тест — живая документация контракта. Если его страшно менять при рефакторинге API — возможно, он смотрит слишком глубоко внутрь.
Какие практики помогают писать поддерживаемые и эффективные тесты в… · Sobeso