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

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

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

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

28 ответов

23 просмотра

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

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

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
часто обсуждаемый пример: компонент - форма (нем...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта