Рубрики
Без рубрики

Список легко тестируемого кода с компонентами без вождения в React.js

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

Автор оригинала: Thomas Greco.

Понимание результатов с чистыми компонентами

Использование функциональных компонентов без гражданства (A.k.a. «Чистые» или «тупые» компоненты) в Rect.js продолжает расти, поскольку сначала он был выпущен в Rect 0.14, и по причинам. Опираясь на чистые компоненты, разработчики в конечном итоге пишут многоразовый код, который чрезвычайно прост в тесте, что приводит к лучшему архитектуре приложения. Почему? Функциональный компонент без природы является просто заводской функцией, используемой для создания реагирования. Лично мне нравится термин «чистый компонент», потому что это указывает на то, что действительно код – чистая функция, посыпанная некоторыми JSX.

«Чистая функция – это функция, которая: учитывая тот же вход, всегда будет возвращать один и тот же выход. Дает никаких побочных эффектов. Полагается на отсутствие внешнего музного состояния».

– Эрик Эллиотт, Мастер интервью JavaScript: Что такое чистая функция

Оснащен правильным количеством тестов, использование чистых функций может помочь привлечь душевное спокойствие разработчикам путем обеспечения того, чтобы любой сценарий, который был протестирован, не имеет непреднамеренного результата в приложении. Как вы можете себе представить, это может пройти долгий путь при создании крупных приложений. Он также не должен прийти как неудивительно, что чистые функции – это сердце redux, которое опирается на javaScript’s Уменьшить функция.

В предстоящем посте я буду в дальнейшем подробнее о том, как уменьшить работу. На данный момент я хочу продолжить представление с идеей записи «пуленепроницаемых» компонентов реагирования с использованием чистых функций. Чтобы наилучшим образом проиллюстрировать это, я собираюсь показать какой-то код, который показывает ADT React Compont.

// Post.js
const Post = ({ postStyles, content }) =>

{content}

;

Чистая природа этих компонентов делает крайне легко рассуждать по поводу кода. В этом случае мы видим, что Пост это просто функция, которая берет postststles и Содержание как реквизит, а затем использует их для создания элемента. Вы можете увидеть реквизит передается в качестве параметра, но я использовал ES6 Разрушение Отказ При этом мы можем вытащить определенные значения из реквизит Объект и доступ ropps.poststyles и ropps.Content без использования точечная запись Отказ

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

Почему это важно

Хотя этот компонент может не выглядеть так много, это может очень хорошо воспроизвести неотъемлемую часть приложения. Например, давайте представим Оказание статей для сайта, который имеет более миллиона ежедневных пользователей. Если это так, то мы, скорее всего, будем хотеть эти меньшие, сплоченные блоки кода, поскольку они позволяют нам легко выбивать каждую последнюю деталь!

Вы также найдете, что чистые компоненты делают модификации Breeze, а также привести к записи кода, который можно легко перенести в другие проекты. В дополнение к этим преимуществам чистые компоненты также делают крайне легко для проверки кода с любыми сумасшедшими реквизитами, которые вы хотите. Как и чистая функция, чистые компоненты всегда будут отображать один и тот же вход к тому же выводу, поэтому Если мы можем подумать о сценарии, мы можем проверить, как наш компонент будет реагировать Отказ

Погружение в тесты на единицу

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

// Post.test.js
import test from 'tape';
import dom from 'cheerio';
import Post from './Post';
import { renderToStaticMarkup } from 'react-dom';

test(' ', assert => {
const msg = 'should render a post with a title and content';
// define pre-exisiting conditions
const contentText = 'I am the content of the blog post. Lorem ipsum I need sum now!';
const props = {
  postStyles: 'post',
  content: contentText
};
const checkProps = new RegExp(contentText, 'g');

const el = 
const $ = dom.load(render(el));
const output = $('.post').html();

const actual = checkProps.test(output);
const expected = true;

assert.same(actual, expected, same);
assert.end()
})

Не волнуйтесь, если код выше, кажется, немного запутанному вам – все будет вскоре смысл.

Шаг 1 – Настройка ранее существовавших условий

В этом случае мы знаем, что берет Название и а Содержание PROP, чтобы мы могли проверить это, просто пройденные в эти значения для реквизит Переменная. Как только мы назначили реквизиты, которые мы хотим проверить, мы можем использовать JavaScript’s Regex Функция для создания другой переменной, CheckProps Отказ

Первоначально статья была неправильно использующей Regexp. Функция, в результате чего, в результате чего тесты дают ложные срабатывания, но он был обновлен с тех пор!

// post.test.js
const contentText = 'I am the content of the blog post. Lorem ipsum I need sum now!';
const props = {
  postStyles: 'post',
  content: contentText
};
const checkProps = new RegExp(contentText, 'g');

Наши модульные тесты должны Проверьте один кусок компонента на каждое испытательное утверждение , который в этом случае это Содержание пропры В частности, мы видим CheckProps Создание для поиска через строку, чтобы убедиться, что она содержит строку, назначенную в CondentText Отказ

Шаг 2 – Визуализация HTML с помощью Cheerio

После этого мы видим использование Cheerio для оказания нашего компонента. Cheerio Позволяет нам пройти и манипулировать DOM, используя его API. Кроме того, Cheerio молниена быстро и в результате этого он в самом сердце популярных библиотек, таких как фермент Отказ

Посмотрите на наш код, мы видим, что Cheerio’s . Нажмите Способ сделать наш реактивный элемент. Оттуда мы можем просто пройти в селекторе содержимого, которое мы хотим проверить. В нашем случае это строка пост Поэтому мы используем .class Селектор используется для захвата этой порты кода. Наконец, мы потом увидимся .html () Способ, который будет представлять собой содержимое от нашего селектора и позволит нам проверить на наш компонент.

// Set up cheerio
const el = 
const $ = dom.load(render(el));
const output = $('.post').html();

Шаг 3 – Проверьте реквизиты

Последнее, что нам нужно сделать, это проверить реквизиты нашего Выход Переменная против нашего метода проверки проверки. Для этого мы создаем фактический Значение путем тестирования вывода против ожидаемого значения, которое в этом случае является правда Отказ

const actual = checkProps.test(output);
const expected = true;
// asserts that actual and expected are equal
assert.same(actual, expected, msg);
// ends assertion test
assert.end();

Если это так, это означает фактический значение вернет правда И дайте нам проходящий тест!

Шаг 4 – Праздновать (последние слова)

Потрясающие! Вы доверяли это до конца. Надеюсь, теперь вы получите хорошее понимание того, как работают функциональные компоненты без гражданства в реакции. Лично я не могу насытиться из них, и я вряд ли когда-нибудь пытаюсь использовать классы в моем коде. Зачем использовать это Если вам не нужно?

Если у вас есть какие-либо вопросы и комментарии, оставьте комментарий ниже!