Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

TDD на Front-end

Усі статті, обговорення, новини про Front-end — в одному місці. Підписуйтеся на телеграм-канал!

Добрый вечер,

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

Я не мастер ТДД, но как то мне кажется очень не правильным покрытие тестов результатов трансформации декларативных вещей. Скажите может я не прав, и таки все тестируют конфиги и шаблоны?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Рендер это view, там нет поведения. Сравнивать dom в строке — бессмысленно. Соотвественно эти тесты не имеют ценности.

Рендер это view, там нет поведения. Сравнивать dom в строке — бессмысленно. Соотвественно эти тесты не имеют ценности.
Ну так подавляйте оттуда рандомные куски: ничего не полагается, знать тесты таки не имеют ценности.
Пример того что можно проверять в тестах на вью:
— наличие элементов, на которые завязана логика компонента;
— наличие определенных свойств у этих элементов. Если есть компоненты системы, как правило, внешние, которые обращаются на прямую к УИ, минуя вашу модель. Примерами могут служить УИ-тесты или читалки (секция 508)

Строку со строкой может и не стоит. А рендер — это функция, зависящая от props и state в реакте, так что мимо.

спасибо за помощь, я таки немного не правильно видел ситуацию

Сегодня случайно наткнулся на то что некоторые люди покрывают юнит тестами результат работы рендер функции в реках компонентах, и вспомнились люди которые также юнит тестами покрывают результат шаблона.
Я не мастер ТДД, но как то мне кажется очень не правильным покрытие тестов результатов трансформации декларативных вещей.
«Покрытие тестами» — это не очень правильно с точки зрения ТДД :)
ТДД подразумевает что вы сначала формируете понимание того что должно произойти, потом оформляете это в виде тесты, потом реализуете (возможно мокируя что-то, а возможно и нет).
Поэтому как раз при ТДД функции «рендер» будут покрыты с очень большой вероятностью, это будет сад-эффектом от применения ТДД (покрытие кода — это как раз сад-эффект, а не цель ТДД):
Сначала я пишу тест в котором проверяю что мой компонент отрисовывает то что надо, то есть тест на эту самую функцию «рендер», а потом уже реализовываю более мелкие части компонента (перед их реализацией на них так же появляются тесты).

разве render — не функция?
функция.
ну, и шо, шо возвращает строку(которая преобразуется в DOM элементы)? разве проверка строки-результата как-то идет против концепции TDD? нет же :)
плюс логика в шаблоне определенно есть, как иначе его тестировать, если не по результатам работы?

Чисто теоретически я понимаю, практически не вижу смысла.

С практической точки зрения это не явно будет протестировано в енд2енд тестах, и там я вижу в этом больший смысл. Ибо так или иначе результат рендер функции будет скормлен просто браузеру, что можеть повлечь изменения. Рендер функцию напрямую никто не использует, то есть никакой другой модуль вашей системы на нее не пологается, а сам реакт не то что вы должны тестировать.

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

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

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

С практической точки зрения это не явно будет протестировано в енд2енд тестах
1)
енд2енд тесты проверяют на наличие или отсутствие ошибки.
юнит тесты указывают на место где эта ошибка есть.
2)
енд2енд как правило занимают значительно больше времени, особенно если туда вставлять проверки не только базовых сценариев, а и особенностей поведения компонентов (в нашем случае отрисовки какого-то блока). Поэтому их запускают не так часто как юнит-тесты. Поэтому у время реакции на них больше чем на юнит тесты.
.
Учитывая что разные уровни тестирования (юнит, интерграционное, приемочное и тд) имеют разное назначение, расчитывать что что-то будет протестировано на другом уровне — это очень не безопасная практика.

ті, хто йде по TDD

тестируют конфиги и шаблоны
ну або розуміють, що це треба робити. Інші не використовують TDD.

То есть вы правда в юнит тестах тестируете то что в файле с конфигом будет конфиг?

Я використовую дві евристики:

1. Чи формулює тест мою мету? (те, що я хочу отримати в підсумку)
2. Чи тестую я (здебільшого) свій код чи бібліотечний?

Якщо на обидва питання відповідь «так» — це корисний тест.

на второй вопрос сложно ответить «да» или «нет» :)

Да ну? :)

Якщо у мене по плану (django) написання зробити сторінку, яка буде повертати статичні дані, то логічно писати тест на view, а не на видачу тестового веб-серверу. Бо view — це мій код, а виклик веб-сервера іде через купу бібліотечного коду.

я понимаю, что вы имеете в виду. и согласен.
но с формальной стороны про ответ «да/нет» на вопрос «или...или...» ходят анекдоты :)

Коли на ці питання можна буде відповісти формально, код почнуть писати скрипти.

Скоро бюрократы докатятся до того, что будут отсекать пользователей, которые не пройдут юнит-тесты.

Так вроде ж бэкграунд чек, нет?

В конце концов вопрос упирается в ROI. Насколько дороже будет написание и поддержка тестов по сравнению с отдачей. Как правило, чем шире охват — тем больше пользы.

покрывают юнит тестами результат работы рендер функции
что проверяют? Если virtual DOM, то вполне вписывается в классическое понятие юнит-тестирования ИМХО. Если браузерный, то пуристы могут спорить что это уже больше чем юнит-тестирование, ну назовите это по-другому и все будет ОК.

А декларативность или императивность вообще не играет тут никакой роли, опять же ИМХО.

Підписатись на коментарі