8 апреля 2022 г. (изменено: 8 апреля 2022 г.)
Канал: @cherkashindev
Пятничное чтиво - Interaction tests
Недавно команда storybook добавила новую фичу - Interaction tests, поэтому в эту пятницу хочу порекомендовать к прочтению статью Test component interactions with Storybook, которая очень хорошо показывает преимущества по сравнению с jest тестами.
Немного проанализировав, для себя я смог выделить следующие преимущества и недостатки.
Преимущества: ✅ Интерактивные тесты запускаются в реальном браузере и в связи с этим не имеют тех ограничений, которые имеет JSDOM. Поэтому, например, мы можем проверять размеры элементов и их расположение относительно друг друга. ✅ Проще отлаживать тесты компонентов в браузере чем в консоли, ведь мы своими глазами видим причину падения тестов. Особенно это упрощает жизнь, если у вас есть мигающие тесты, падающие время от времени. ✅ Наличие фичи пошаговой отладки, позволяет пошагово отлаживать тесты прямо в браузере без использования dev tools.
Недостатки:
⚠️ Для запуска интерактивных тестов используется playwright. Michael Shilman (член команды storybook) утверждает, что в настоящее время playwright тесты занимают в среднем на 30% больше времени, чем jest тесты. В то же время, команда storybook работает над разработкой своего собственного тест-раннера и считает, что сможет добиться скорости выполнения тестов сравнимой с JSDOM.
⚠️ Тест-раннер работает только с запущенной версией storybook, поэтому помимо запуска тестов необходимо предварительно запустить storybook. Если storybook ещё не включен в ваш CI/CD pipeline — это также увеличит время работы pipeline’а.
⚠️ Storybook позволяет мокать API запросы, но в целом всё ещё в значительной степени уступает jest. Например, вы не сможете замокать код только для выбранных историй, или мокать код индивидуально для каждой выбранной истории.
⚠️ В данный момент интерактивные тесты не поддерживают test coverage.
Напоследок, хотел бы отметить два момента: ⚫️ Интерактивные тесты, не являются полной заменой jest - они предназначены лишь для тестирования компонентов и не подходит, например, для тестирования утилитных функций. ⚫️ Все перечисленные недостатки скорее всего будут со временем решены, так как релиз фичи состоялся не так давно, и команда storybook работает над её улучшением.