Спасибо за ваш ответ. Я хотел бы немного рассказать о том, почему я не использовал снимки для подтверждения результатов рендеринга.

Основная причина заключается в том, что снимки вывода рендеринга часто скрывают контракт тестируемого компонента.

Это потому, что они захватывают весь вывод рендеринга, включая как важные, так и неважные части. Снимки обновлять несложно, но если у вас есть только тест снимка и ничего больше, то, когда его нужно обновить, будет сложно определить, «безопасно» это обновление или нет. Моментальный тест не говорит вам, что ваш код сломался, а только то, что он изменился. Чтобы определить, сломался ли он, вам нужно будет понять, как работает компонент, но не будет никаких тестов, документирующих его предполагаемое поведение.

Я чувствую, что многие люди пишут тест-снимок для своего компонента и чувствуют, что теперь они в безопасности, потому что все покрыто. Но это испытание - просто канарейка в угольной шахте; он не может сказать вам, почему новое поведение считается неправильным.

Если вы вместо этого напишете императивные тесты, то многие тесты будут продолжать проходить после изменения компонента, а для тех, которые сломались, будет более ясно, почему они сломались и чего ожидал компонент вместо этого.

Другая причина заключается в том, что снимки полного вывода рендеринга хрупкие, потому что их нужно будет обновлять всякий раз, когда изменяется тест дочернего компонента. Опять же, снимки нетрудно обновить, но хрупкий тест - это хрупкий тест, и, учитывая, что снимки так легко обновлять массово, вам следует избегать добавления шума к сигналу, который они предоставляют. Можно делать снимки неглубоких результатов рендеринга (используя либо макеты, либо тщательно построенное дерево), но может быть трудно передать системе, насколько точно глубину рендеринга для снимка; по умолчанию со снимками требуется больше, чем меньше. Мне кажется, что при императивном подходе легче объяснить, какие именно элементы вам важны (но мне бы хотелось, чтобы инструменты изменили это мнение).

Моментальные снимки Jest - очень мощный инструмент и могут быть очень полезными, но я думаю, что они не подходят для большинства компонентов React, потому что они скрывают детали контракта компонента. Однако вот некоторые вещи, для которых снимки отлично:

  • Приложения со сложными, часто меняющимися требованиями, например красивее.
  • Хрупкие тесты, в которых вы делаете утверждение вокруг большой многострочной строки, как результат флага --help для инструмента CLI.

Моментальные снимки - бесценный инструмент для сквозного тестирования и тестирования интеграции, но их следует использовать с осторожностью в модульных тестах. Я считаю снимки мачете, а императивные утверждения - скальпелем. Конечно, резка скальпелем занимает больше времени… но иногда требуется точность.