Size: a a a

JavaScript.Ninja

2021 June 10

IK

Illya Klymov in JavaScript.Ninja
я тоже. Но по опыту работы и с реактом и с вью интерпретировать хуки как отдельные элементы системы - тупиковый путь
источник

IK

Illya Klymov in JavaScript.Ninja
проще и полезнее делать переиспользуемые блоки тестов в поведении
источник

IK

Illya Klymov in JavaScript.Ninja
Почему тупиковый? Потому что хуки подобны "вирусам" - это одновременно и "жизнь" и "не жизнь" - то есть логику они несомненно несут, но автономной единицей не являются
источник

KR

Kirill Romanov in JavaScript.Ninja
А если их внедрять через DI?
источник

IK

Illya Klymov in JavaScript.Ninja
А способ внедрения вообще не важен - это лишь способ "доставки" до компонента
источник

IK

Illya Klymov in JavaScript.Ninja
суть в том, что каждый первый подход к тестированию учит нас, что компонент должен быть черным ящиком. Делая предположение, что он состоит из таких-то хуков мы очень сильно нарушаем этот принцип
источник

KR

Kirill Romanov in JavaScript.Ninja
Ну а в чем концептуальная разница между хуком и сервисом, например?
источник

M

Michael in JavaScript.Ninja
react query хуки тоже не имеет смысла тестировать отдельно? У них в доках примеры для отдельного тестирования хуков.

Я же сделал тест реакт компонента, который вызывает кастомный хук, который вызывает useQuery, который вызывает метод, который вызывает апи.

У меня так половина приложения протестировалась. Это нормально?
источник

IK

Illya Klymov in JavaScript.Ninja
в том что сервис является логической единицей
источник

IK

Illya Klymov in JavaScript.Ninja
то что в доках есть примеры для тестирования хуков, по моему опыту не показательно. Вам же всё равно как компонент реализовывает задачи :)
источник

IK

Illya Klymov in JavaScript.Ninja
Почему хук не является логической единицей - потому что вы не можете запустить хук отдельно - он обязательно должен быть внедрен куда-то
источник

IK

Illya Klymov in JavaScript.Ninja
это как тестировать отдельно миксины :)
источник

M

Michael in JavaScript.Ninja
но ведь у меня же вышел очень интеграционный тест. А вы вроде как сторонник более модульных
источник

IK

Illya Klymov in JavaScript.Ninja
Я этот вопрос в одном из последних бонусов освещал "как так, я не могу протестировать отдельно функцию". Современное тестирование не выделяет сущности ниже модуля
источник

KR

Kirill Romanov in JavaScript.Ninja
ну во многих ситуациях вполне себе можно запустить отдельно. Лишь малая часть хуков как-то зависит от жизненного цикла компонента
источник

IK

Illya Klymov in JavaScript.Ninja
здесь всё упирается в определение слова "поведение". Мы тестируем поведение компонентов. Если вы определяете поведение компонента как вызов хуков с теми или иными параметрами - то можете тестировать хуки

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

M

Michael in JavaScript.Ninja
но ведь и сервис в реакт приложении вряд ли будет запускаться отдельно от компонента
источник

IK

Illya Klymov in JavaScript.Ninja
Сервис - это другой слой (вью слой и логика)
источник

IK

Illya Klymov in JavaScript.Ninja
границы слоев мы всегда тестируем
источник

M

Michael in JavaScript.Ninja
хук ведь тоже логика, нет?
источник