169 похожих чатов

Ну раз пошла жара про хуки/классы. Какие есть изящные решения по

организации кода в том числе для тестирования функционального компонента в изоляции от логики из хуков?

Stub / mock кастомного хука? DI через Props? другие способы?

28 ответов

5 просмотров

А зачем тестировать компонент в изоляции от его же логики?)

тестировать все вместе. в реакте нет (практически) чистого юнит-тестирования

Volodymyr Klimov
Просто "юнит" - понятие растяжимое)

растяжимый юнит :) толстеет до интеграционного размера

Vitaliy-Ponomarev Автор вопроса
Volodymyr Klimov
А зачем тестировать компонент в изоляции от его же...

ну не хочу я "интеграционные" тесты, например. Хочу видеть разные состояния просто передачей свойств. Не нужно чтобы оно какими-то эффектами в api стучало, и т.п.

Vitaliy Ponomarev
ну не хочу я "интеграционные" тесты, например. Хо...

Так это и не интеграционные Компонент - это один "юнит", его можно так и тестировать Мне так кажется А если вы используете react testing library - там вообще не юнит тесты же

Vitaliy-Ponomarev Автор вопроса
Roman Usherenko
так апи и мокай

так это уже интеграционный тест и есть, если api мокать. в этом случае мне проще сам хук без UI тестировать

Vitaliy Ponomarev
ну не хочу я "интеграционные" тесты, например. Хо...

Компонент - это черный ящик, это и есть ваш модуль для юнит тестирования, то, что он использует какие-то хуки - его дело

Vitaliy Ponomarev
так это уже интеграционный тест и есть, если api м...

Это никак не гарантирует, что он работает хорошо в компонентах же

Vitaliy Ponomarev
так это уже интеграционный тест и есть, если api м...

если хук - самостоятельная реиспользуемая единица, можно его в изоляции тестировать

Vitaliy-Ponomarev Автор вопроса
Volodymyr Klimov
Компонент - это черный ящик, это и есть ваш модуль...

с каких пор? компонент - это верстка, не более. Захочу - могу то же самое хоть в консоли делать, но функциональность должна быть +/- та же (я не про кнопконажимание сейчас)

Vitaliy Ponomarev
с каких пор? компонент - это верстка, не более. З...

Не согласен, что компонент - это "просто верстка"

Vitaliy Ponomarev
с каких пор? компонент - это верстка, не более. З...

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

Roman Usherenko
если ты делишь компоненты на "логику" и "верстку",...

И всё-равно логичнее будет делать уже интеграционный тест из этих двух компонентов потому, что по отдельности они не имеют смысла😁

Volodymyr Klimov
И всё-равно логичнее будет делать уже интеграционн...

не ну чо, версточный компонент можно покрыть вдоль и поперек вариациями пропов

Vitaliy-Ponomarev Автор вопроса
Volodymyr Klimov
И всё-равно логичнее будет делать уже интеграционн...

ну например, я могу переписать ту же форму в виде ввода-вывода в терминал, на каком-нибудь ink , но формой она от этого быть не перестанет, со своей же логикой и api.

Vitaliy Ponomarev
ну например, я могу переписать ту же форму в виде ...

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

Vitaliy-Ponomarev Автор вопроса
Volodymyr Klimov
Я не понял как это связано с тем, что компонент - ...

вот вопрос как раз в том - как при таких условиях должен быть организован компонент на хуках? чтобы не дублировать логику (переиспользовать её) и тестировать все необходимые состояния? т.е. очевидно будет что-то про api (отдельный хук), что-то про внешний вид самого компонента (в props или state)

Vitaliy Ponomarev
вот вопрос как раз в том - как при таких условиях ...

Вы не должны полагаться на то, что компонент использует конкретный хук, на мой взгляд Это деталь его внутренней реализации

Vitaliy-Ponomarev Автор вопроса
Volodymyr Klimov
Вы не должны полагаться на то, что компонент испол...

> Это деталь его внутренней реализации вот у меня этот пункт до сих пор вызывает сомнения. логика сайд-эффекта, который ходит в api - деталь реализации кнопки submit?

Vitaliy Ponomarev
> Это деталь его внутренней реализации вот у меня...

Деталь - это то, как именно происходит сабмит, грубо говоря

Vitaliy-Ponomarev Автор вопроса
Volodymyr Klimov
Кнопка же не ходит в апи)

часто обсуждаемый пример: компонент - форма (немного упрощу - состоит из одной кнопки и поля ввода). Но: - при 401 ошибке - пользователя нужно перенаправить на login - при 200 - перебросить на следующую страницу и так для 2 из 3 форм на сайте (третья доступна неавторизованному пользователю, форма - "кнопка" - теперь уже знает что есть какая-то авторизация?)

Vitaliy Ponomarev
часто обсуждаемый пример: компонент - форма (нем...

Кнопка причем? Кнопка - это другой уровень абстракции вообще, ее вы тестируете отдельно и она не знает ничего кроме того, как должна работать кнопка, вы меня неправильно поняли, может

Похожие вопросы

Обсуждают сегодня

Коллеги, здравствуйте! А можно узнать ваше мнение относительно Wolfram Mathematica vs Julia? Просто у меня стоит выбор между тем, чтобы продолжить преподавать Wolfram Mathemat...
Илья Гаража
10
Обновленный chat тестили уже господа? Готовимся на заводы ? Простой проект на ларавель собирает за 1 ответ..
Jacov Borisov
11
кому не сложно распишите пожалуйста для какой цели тут вот эти скобки и в них пихается указатель?
Михаил Helper
15
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Или мне дублировать структуру с информацией о следующем потоке в адресное пространство текущего потока?
One
9
Серьезно? Вот прям так на глагне на первом экране?
Sasha Beep
8
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
в "главной форме" создаются "дочерние формы / копии главной" new_form := TForm1.Create(Application); new_form.blah_blah_blah обработчик, срабатывающий при изменении положени...
livontiy
6
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
Карта сайта