Чому снапшоти часто вважають антипатерном?
Снапшоти часто вважають антипатерном, тому що вони легко перетворюються на шум, який по суті нічого не перевіряє і ускладнює підтримку тестів.
Основні причини:
1. Тести перестають перевіряти логіку
Снапшот фіксує величезне «полотно» результату, і під час змін розробники часто просто оновлюють снапшот, не заглиблюючись, чи правильна зміна відбулася. У підсумку тест нічого не гарантує, він перетворюється на формальність.
2. Хибне відчуття безпеки
Здається, що «компонент покритий тестами», але снапшот не перевіряє важливих деталей. Він лише порівнює стан «до/після» і не відповідає на головне питання: чи працює компонент правильно. Тест зелений, але баг лишається.
3. Шумні дифи і слабке сигналізування
Снапшоти часто великі. У дифі складно помітити, що саме змінилося, і легко пропустити реальний дефект серед безлічі незначущих змін.
4. Крихкість
Найменші косметичні зміни (відступ, перенесення рядка, незначний рефакторинговий рух у JSX) ламають снапшот. Тести починають падати занадто часто, спонукаючи просто «оновити снапшот і рухатися далі», і користь від них зникає.
5. Відсутність явних тверджень
Хороший тест відповідає на питання:
«яку конкретну поведінку я перевіряю?»
Снапшотний тест відповідає:
«все має бути, як раніше»
Але це занадто розмито, і тест втрачає сенс.
Підсумок
Снапшоти, не зло, але:
- їх легко використовувати ліниво
- вони погано виражають наміри тесту
- вони швидко перетворюються на антикорисний шум
Тому багато розробників вважають снапшоти антипатерном і віддають перевагу явним очікуванням і точковим перевіркам, які тестують сенс, а не «картинку».
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.