Skip to main content

Чому снапшоти часто вважають антипатерном?

Снапшоти часто вважають антипатерном, тому що вони легко перетворюються на шум, який по суті нічого не перевіряє і ускладнює підтримку тестів.

Основні причини:


1. Тести перестають перевіряти логіку

Снапшот фіксує величезне «полотно» результату, і під час змін розробники часто просто оновлюють снапшот, не заглиблюючись, чи правильна зміна відбулася. У підсумку тест нічого не гарантує, він перетворюється на формальність.


2. Хибне відчуття безпеки

Здається, що «компонент покритий тестами», але снапшот не перевіряє важливих деталей. Він лише порівнює стан «до/після» і не відповідає на головне питання: чи працює компонент правильно. Тест зелений, але баг лишається.


3. Шумні дифи і слабке сигналізування

Снапшоти часто великі. У дифі складно помітити, що саме змінилося, і легко пропустити реальний дефект серед безлічі незначущих змін.


4. Крихкість

Найменші косметичні зміни (відступ, перенесення рядка, незначний рефакторинговий рух у JSX) ламають снапшот. Тести починають падати занадто часто, спонукаючи просто «оновити снапшот і рухатися далі», і користь від них зникає.


5. Відсутність явних тверджень

Хороший тест відповідає на питання:

«яку конкретну поведінку я перевіряю?»

Снапшотний тест відповідає:

«все має бути, як раніше»

Але це занадто розмито, і тест втрачає сенс.


Підсумок

Снапшоти, не зло, але:

  • їх легко використовувати ліниво
  • вони погано виражають наміри тесту
  • вони швидко перетворюються на антикорисний шум

Тому багато розробників вважають снапшоти антипатерном і віддають перевагу явним очікуванням і точковим перевіркам, які тестують сенс, а не «картинку».

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.