Как протестировать компоненты React с помощью Jest - SitePoint
Воскресенье, 29.12.2013, 07:55
Заработок в интернете для новичков
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
МЕНЮ САЙТА
КАТЕГОРИИ раздела
  • Истории успеха
  • Оптимизация
  • B2b
  • Хлебные крошки
  • SEO
  • Социальные сети
  • Антивирус
  • Семантическое ядро
  • Реклама
  • Новости
  • Новости
    Оптимизация текстов под Яндекс и Гугл за счет их форматирования
    Обновлено: 17 февраля 2017 Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. Сегодня я хочу продолжить тему, начатую в статье « Seo оптимизация текстов для коммерческого сайта ». В начале

    301 редирект в htaccess для SEO оптимизации страниц сайта
    Здравствуйте, уважаемые читатели блога Goldbusinessnet.com. Если говорить вкратце, то 301 редирект очень часто используют, когда необходимо исключить возникновение дублей, а также сохранить уже имеющийся

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

    Команды для оптимизации cs go
    У многих людей слабое железо, и каждый второй хочет ускорить производительность своего компьютера и поднять FPS в играх CS:GO, CS:S, Minecraft и других играх. В этой статье я хочу раскрыть кучу секретов

    Настраиваем графику Assassin's Creed Unity
    Наконец-то вышла долгожданная Assassin’s Creed Unity, расширив возможности используемого в Assassin’s Creed IV: Black Flag движка AnvilNext по части стелс-экшна, игровой механики и почти безупречного воссоздания

    Антикризисная стратегия корпорации (компании) - АЛЬТ-Маркетинг - Альтернативные Маркетинговые Технологии
    АЛЬТ-Маркетинг - Альтернативные Маркетинговые Технологии Главная > Библиотека > Стратегическое планирование, разработка стратегии, корпоративные и функциональные стратегии

    Оптимизация SQL-запросов
    Метки статей: 100mbru , CentOS , cms , drupal , joomla , LAMP , linux , mysql , nicru , Open-Source , Red Hat , seo , Typo3 , ubuntu , авто , администрирование , алгоритмы , алкоголь

    Методы и способы оптимизации налогообложения на предприятии в 2017 году
    Для каждой компании основной задачей является повышение рентабельности своего бизнеса. Общеизвестно, что значительный размер  затрат предприятия составляют налоговые платежи. Ежегодно политика налоговой

    Seo
    Как я и говорил, начинаю публикации в блоге со статей для новичков, так сказать, потрогаем азы… SEO  – это просто аббревиатура, которая в английском языке произносится и пишется как Search Engines

    Оптимизация производительности MySQL на ОС Linux
    Существует множество факторов, влияющих на производительность MySQL в Azure, которые зависят и от выбора виртуального оборудования, и от конфигурации программного обеспечения. Эта статья посвящена оптимизации

    Праздники России
    Статистика
    Rambler's Top100




    Онлайн всего: 0
    Гостей: 0
    Пользователей: 0

    Как проверить компоненты React с помощью Jest

    1. Для TDD или не для TDD?
    2. Представляя Jest
    3. Установка и настройка Jest
    4. Тестирование бизнес-логики
    5. Повторные тесты на изменения
    6. Тестирование компонентов React
    7. Лучшее тестирование компонентов со снимками
    8. Заключение

    Эта статья написана гостем Джеком Франклином . Гостевые посты SitePoint направлены на то, чтобы привлечь к вам интересный контент от известных авторов и спикеров сообщества JavaScript.

    В этой статье мы рассмотрим использование Шутка - рамки тестирования, поддерживаемые Facebook - для тестирования наших ReactJS компоненты. Сначала мы рассмотрим, как мы можем использовать Jest для простых функций JavaScript, а затем рассмотрим некоторые из функций, которые он предоставляет из коробки, специально предназначенных для упрощения тестирования приложений React. Стоит отметить, что Jest не предназначен специально для React: вы можете использовать его для тестирования любых приложений JavaScript. Однако несколько функций, которые он предоставляет, очень удобны для тестирования пользовательских интерфейсов, поэтому он отлично подходит для React.

    Прежде чем мы сможем что-либо протестировать, нам нужно приложение для тестирования! Оставаясь верным традиции веб-разработки, я создал небольшое приложение, которое мы будем использовать в качестве отправной точки. Вы можете найти его вместе со всеми тестами, которые мы собираемся написать, на GitHub , Если вы хотите поиграть с приложением, чтобы почувствовать его, вы также можете найти живое демо онлайн ,

    Приложение написано на ES2015, скомпилировано с использованием Webpack с предустановками Babel ES2015 и React. Я не буду вдаваться в подробности настройки сборки, но это все в репозитории GitHub если вы хотите проверить это. В README вы найдете подробные инструкции о том, как запустить приложение локально. Если вы хотите узнать больше, приложение построено с использованием Webpack и я рекомендую Руководство для начинающих по Webpack »Как хорошее введение в инструмент.

    Точкой входа приложения является app / index.js, который просто отображает компонент Todos в HTML:

    render (<Todos />, document.getElementById ('app'));

    Компонент Todos является основным центром приложения. Он содержит все состояние (жестко запрограммированные данные для этого приложения, которые в действительности могут быть получены из API или подобного) и содержит код для отображения двух дочерних компонентов: Todo, который отображается один раз для каждой задачи в состоянии, и AddTodo, который отображается один раз и предоставляет пользователю форму для добавления новой задачи.

    Поскольку компонент Todos содержит все состояния, он нуждается в компонентах Todo и AddTodo, чтобы уведомлять его о любых изменениях. Поэтому он передает функции в эти компоненты, которые они могут вызывать при изменении некоторых данных, и Todos может соответствующим образом обновлять состояние.

    Наконец, сейчас вы заметите, что вся бизнес-логика содержится в app / state-functions.js:

    функция экспорта toggleDone (state, id) {…} функция экспорта addTodo (state, todo) {…} функция экспорта deleteTodo (state, id) {…}

    Это все чистые функции, которые принимают состояние и некоторые данные и возвращают новое состояние. Если вы не знакомы с чистыми функциями, это функции, которые ссылаются только на данные, которые им дают, и не имеют побочных эффектов. Более подробно вы можете прочитать моя статья на A List Apart о чистых функциях а также моя статья на SitePoint о чистых функциях и React ,

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

    Для TDD или не для TDD?

    Было написано много статей о плюсах и минусах разработки, основанной на тестировании , где разработчики должны сначала написать тесты, прежде чем писать код для исправления теста. Идея заключается в том, что, сначала написав тест, вы должны подумать об API, который вы пишете, и это может привести к лучшему дизайну. Я считаю, что это очень сильно зависит от личных предпочтений, а также от того, что я тестирую. Я обнаружил, что для компонентов React мне нравится сначала писать компоненты, а затем добавлять тесты к наиболее важным элементам функциональности. Однако, если вы обнаружите, что написание тестов в первую очередь для ваших компонентов соответствует вашему рабочему процессу, вам следует это сделать. Здесь нет жесткого правила; делай то, что тебе больше нравится для тебя и твоей команды

    Обратите внимание, что эта статья будет посвящена тестированию внешнего кода. Если вы ищете что-то сфокусированное на серверной части, обязательно ознакомьтесь с курсом SitePoint Разработка через тестирование в Node.js ,

    Представляя Jest

    Шутка Впервые был выпущен в 2014 году, и хотя изначально он вызвал большой интерес, проект некоторое время находился в состоянии покоя и над ним не так активно работали. Тем не менее, в прошлом году Facebook вложил средства в улучшение Jest и недавно опубликовал несколько выпусков с впечатляющими изменениями, которые стоит пересмотреть. Единственное сходство Jest по сравнению с первоначальным релизом с открытым исходным кодом - это название и логотип. Все остальное было изменено и переписано. Если вы хотите узнать больше об этом, вы можете прочитать Комментарий Кристофа Пойера где он обсуждает текущее состояние проекта.

    Если вы расстроены настройкой тестов Babel, React и JSX с использованием другого фреймворка, то я определенно рекомендую попробовать Jest. Если вы обнаружили, что ваша существующая настройка теста идет медленно, я также настоятельно рекомендую Jest. Он автоматически запускает тесты параллельно, а его режим наблюдения может запускать только тесты, относящиеся к измененному файлу, что неоценимо при наличии большого набора тестов. Идет с JSDom Это означает, что вы можете писать тесты браузера, но запускать их через Node, работать с асинхронными тестами и иметь расширенные функции, такие как насмешки, шпионы и заглушки.

    Установка и настройка Jest

    Для начала нам нужно установить Jest. Поскольку мы также используем Babel, мы установим еще пару модулей, которые позволят Jest и Babel хорошо играть из коробки:

    npm install --save-dev babel-jest babel-polyfill babel-preset-es2015 шутка babel-preset-реакции

    Вам также необходимо иметь файл .babelrc с Babel, настроенным для использования любых необходимых пресетов и плагинов. В примере проекта уже есть этот файл, который выглядит так:

    {"presets": ["es2015", "реагировать"]}

    Мы пока не будем устанавливать какие-либо инструменты тестирования React, потому что мы не собираемся начинать с тестирования наших компонентов, а наших функций состояния.

    Jest ожидает найти наши тесты в папке __tests__, которая стала популярным соглашением в сообществе JavaScript, и мы собираемся придерживаться его. Если вы не являетесь поклонником установки __tests__, Jest также поддерживает поиск любых файлов .test.js и .spec.js.

    Поскольку мы будем тестировать наши функции состояния, давайте создадим __tests __ / state-functions.test.js.

    Мы напишем правильный тест в ближайшее время, но сейчас добавим этот фиктивный тест, который позволит нам проверить, что все работает правильно, и у нас настроен Jest.

    description ('Addition', () => {it ('знает, что 2 и 2 составляют 4', () => {Ожидаем (2 + 2) .toBe (4);});});

    Теперь зайдите в ваш package.json. Нам нужно настроить тест npm, чтобы он запускал Jest, и мы можем сделать это, просто установив тестовый скрипт для запуска jest.

    "scripts": {"test": "jest"}

    Если вы теперь запускаете npm test локально, вы должны увидеть, как ваши тесты выполняются, и пройти!

    PASS __tests __ / state-functions.test.js Дополнение ✓ знает, что 2 и 2 составляют 4 (5 мс) набора тестов: 1 пройдено, всего 1 тестов: 1 пройдено, 1 всего снимков: 0 пройдено, 0 всего времени: 3.11s

    Если вы когда-либо пользовались Jasmine или большинством фреймворков для тестирования, сам код теста выше должен быть довольно знакомым. Jest позволяет нам использовать описывать и вставлять тесты так, как нам нужно. Сколько вложений вы используете, зависит от вас; Мне нравится вкладывать мои так, чтобы все описательные строки были переданы для описания, и это читается почти как предложение.

    Когда дело доходит до создания реальных утверждений, вы оборачиваете объект, который вы хотите проверить, в вызов ожидаемого (), прежде чем вызывать утверждение для него. В этом случае мы привыкли быть. Вы можете найти список всех доступных утверждений в документации Jest , toBe проверяет соответствие заданного значения тестируемому значению, используя для этого ===. Мы встретимся с некоторыми утверждениями Джеста в этом уроке.

    Тестирование бизнес-логики

    Теперь мы видели, как Jest работает над фиктивным тестом, давайте запустим его по-настоящему! Мы собираемся протестировать первую из наших функций состояния, toggleDone. toggleDone принимает текущее состояние и идентификатор задачи, которую мы хотели бы переключить. У каждой задачи есть свойство done, и toggleDone должен поменять его с true на false или наоборот.

    Если вы следите за этим, убедитесь, что вы клонировали Сделки рЕПО и скопировали папку приложения в тот же каталог, в котором находится ваша папка ___tests__. Вам также нужно будет установить пакет shorttid (npm install shortid --save), который является зависимостью от приложения Todo.

    Я начну с импорта функции из app / state-functions.js и настройки структуры теста. В то время как Jest позволяет вам использовать описать и вкладывать его так глубоко, как вы хотели бы, вы также можете использовать тест, который часто будет читать лучше. test - это просто псевдоним функции it в Jest, но иногда он делает тесты намного проще для чтения и менее вложенными.

    Например, вот как я написал бы этот тест с вложенным описанием, и он вызывает:

    import {toggleDone} из '../app/state-functions'; description ('toggleDone', () => {description ('если задано неполное задание', () => {it ('помечает задание как выполненное', () => {});});});

    А вот как я бы сделал это с помощью теста:

    import {toggleDone} из '../app/state-functions'; test ('toggleDone завершает неполное задание', () => {});

    Тест все еще хорошо читается, но теперь мешает меньше отступов. Этот в основном зависит от личных предпочтений; выберите тот стиль, который вам удобнее.

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

    const startState = {todos: [{id: 1, done: false, name: 'Buy Milk'}]}; const finState = toggleDone (startState, 1); Ожидайте (finState.todos) .toEqual ([{id: 1, done: true, name: 'Buy Milk'}]);

    Теперь обратите внимание, что я использую toEqual, чтобы сделать свое утверждение. Вы должны использовать toBe для примитивных значений, таких как строки и числа, но toEqual для объектов и массивов. Метод toEqual создан для работы с массивами и объектами и будет рекурсивно проверять каждое поле или элемент данного объекта, чтобы убедиться, что он совпадает.

    Теперь мы можем запустить тест npm и посмотреть, как прошел тест функции состояния:

    PASS __tests __ / state-functions.test.js ✓ tooggleDone завершает незавершенную задачу (9 мс). Наборы тестов: 1 пройдено, 1 всего тестов: 1 пройдено, 1 всего снимков: 0 пройдено, 0 всего времени: 3.166s

    Повторные тесты на изменения

    Немного расстраивает внесение изменений в тестовый файл, а затем приходится снова вручную запускать тест npm. Одна из лучших функций Jest - это режим просмотра, который отслеживает изменения файлов и соответственно запускает тесты. Он даже может выяснить, какое подмножество тестов нужно запустить на основе файла, который изменился. Он невероятно мощный и надежный, и вы можете запускать Jest в режиме просмотра и оставлять его на весь день, пока создаете свой код.

    Чтобы запустить его в режиме просмотра, вы можете запустить тест npm - --watch. Все, что вы передадите в npm test после первого - будет напрямую передано основной команде. Это означает, что эти две команды фактически эквивалентны:

    • npm test - --watch
    • шут - часы

    Я бы порекомендовал оставить Jest запущенным на другой вкладке или в окне терминала для остальной части этого урока.

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

    Покажи мне тест

    Помните, что вам придется обновить оператор импорта вверху, чтобы импортировать deleteTodo вместе с toggleTodo:

    import {toggleTodo, deleteTodo} из '../app/state-functions';

    И вот как я написал тест:

    test ('deleteTodo удаляет задание, которое ему дано', () = & gt; {const startState = {todos: [{id: 1, done: false, name: 'Buy Milk'}]}; const finState = deleteTodo (startState , 1); ожидаем (finState.todos) .toEqual ([]);});

    Тест не слишком сильно отличается от первого: мы устанавливаем наше начальное состояние, запускаем нашу функцию и затем утверждаем готовое состояние. Если вы оставили Jest запущенным в режиме наблюдения, обратите внимание, как он подхватывает ваш новый тест и запускает его, и как быстро он это делает! Это отличный способ получить мгновенный отзыв о ваших тестах по мере их написания.

    Вышеприведенные тесты также демонстрируют идеальный макет для теста, который:

    • настроить
    • выполнить тестируемую функцию
    • утверждать на результатах.

    Придерживаясь тестов, изложенных таким образом, вам будет легче следить за ними и работать с ними.

    Теперь мы довольны тестированием наших функций состояния, давайте перейдем к компонентам React.

    Тестирование компонентов React

    Стоит отметить, что по умолчанию я бы рекомендовал вам не писать слишком много тестов для ваших компонентов React. Все, что вы хотите очень тщательно протестировать, например, бизнес-логику, должно быть извлечено из ваших компонентов и находиться в автономных функциях, подобно функциям состояния, которые мы тестировали ранее. Тем не менее, иногда полезно протестировать некоторые взаимодействия React (например, убедитесь, что определенная функция вызывается с правильными аргументами, когда пользователь нажимает кнопку). Мы начнем с тестирования того, что наши компоненты React отображают правильные данные, а затем рассмотрим тестирование взаимодействий. Затем мы перейдем к снимкам, особенность Jest, которая делает тестирование вывода компонентов React намного более удобным.

    Чтобы сделать это, нам нужно будет использовать реагировать-аддоны-тест-утилиты, библиотеку, которая предоставляет функции для тестирования React , Мы также установим энзим библиотека-обёртка, написанная AirBnB, которая значительно упрощает тестирование компонентов React. Мы будем использовать этот API на протяжении наших тестов. Enzyme - фантастическая библиотека, и команда React даже рекомендует ее как способ тестирования компонентов React.

    npm install --save-dev response-addons-test-utils энзим

    Давайте проверим, что компонент Todo отображает текст своей задачи внутри абзаца. Сначала мы создадим __tests __ / todo.test.js и импортируем наш компонент:

    импортировать Todo из '../app/todo'; импорт React из 'реакции'; import {mount} из 'энзима'; test ('Компонент Todo отображает текст задачи', () => {});

    Я также импортирую монтирование из фермента. Функция mount используется для визуализации нашего компонента, а затем позволяет нам проверять вывод и делать на нем утверждения. Несмотря на то, что мы запускаем наши тесты в Node, мы все равно можем писать тесты, которые требуют DOM. Это потому, что Jest настраивает jsdom библиотека, которая реализует DOM в Node. Это здорово, потому что мы можем писать тесты на основе DOM без необходимости каждый раз запускать браузер для их тестирования.

    Мы можем использовать mount для создания нашего Todo:

    const todo = {id: 1, done: false, name: 'Buy Milk'}; const wrapper = mount (<Todo todo = {todo} />);

    И тогда мы можем вызвать wrapper.find, предоставив ему CSS-селектор, чтобы найти абзац, который, как мы ожидаем, будет содержать текст Todo. Этот API может напоминать вам о jQuery, и это специально. Это очень интуитивно понятный API для поиска отрендеренного вывода, чтобы найти соответствующие элементы.

    const p = wrapper.find ('. toggle-todo');

    И, наконец, мы можем утверждать, что текст в нем - «Купить молоко»:

    ожидайте (p.text ()). toBe («Купить молоко»);

    Что оставляет наш весь тест похожим на это:

    импортировать Todo из '../app/todo'; импорт React из 'реакции'; import {mount} из 'энзима'; test ('TodoComponent отображает текст внутри него', () => {const todo = {id: 1, done: false, name: 'Buy Milk'}; const wrapper = mount (<Todo todo = {todo} /> ); const p = wrapper.find ('. toggle-todo'); ожидаемо (p.text ()). toBe ('Buy Milk');});

    Уф! Вы можете подумать, что было много работы и усилий, чтобы проверить, что «Buy Milk» помещается на экран, и, ну… вы были бы правы. Но пока держите своих лошадей; в следующем разделе мы рассмотрим использование возможности снимка Jest, чтобы сделать это намного проще.

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

    В этом тесте мы собираемся утверждать, что при щелчке по todo, компонент вызовет пропущенную функцию doneChange, которую он дал.

    test ('Todo вызывает doneChange при нажатии todo', () => {});

    То, что мы хотим сделать, это иметь функцию, которую мы можем отслеживать ее вызовы и аргументы, с которыми она вызывается. Затем мы можем проверить, что, когда пользователь нажимает на задачу, вызывается функция doneChange, а также вызывается с правильными аргументами. К счастью, Jest предоставляет это из коробки со шпионами. Шпион - это функция, реализация которой вас не волнует; Вы просто заботитесь о том, когда и как это называется. Думайте об этом, как будто вы следите за функцией. Чтобы создать его, мы вызываем jest.fn ():

    const doneChange = jest.fn ();

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

    const todo = {id: 1, done: false, name: 'Buy Milk'}; const doneChange = jest.fn (); const wrapper = mount (<Todo todo = {todo} doneChange = {doneChange} />);

    Далее мы можем снова найти наш абзац, как в предыдущем тесте:

    const p = TestUtils.findRenderedDOMComponentWithClass (rendered, 'toggle-todo');

    И тогда мы можем вызвать имитацию на нем для имитации пользовательского события, передавая click в качестве аргумента:

    p.simulate ( 'щелчок');

    И все, что осталось сделать, это утверждать, что наша шпионская функция была вызвана правильно. В этом случае мы ожидаем, что он будет вызван с идентификатором задачи, который равен 1. Мы можем использовать функцию ожидаем (doneChange) .toBeCalledWith (1), чтобы подтвердить это, и с этим мы закончили с нашим тестом!

    test ('TodoComponent вызывает doneChange при нажатии на todo', () => {const todo = {id: 1, done: false, name: 'Buy Milk'}; const doneChange = jest.fn (); const wrapper = mount (<Todo todo = {todo} doneChange = {doneChange} />); const p = wrapper.find ('. Toggle-todo'); p.simulate ('click'); ожидаемо (doneChange) .toBeCalledWith (1) ;});

    Лучшее тестирование компонентов со снимками

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

    Когда вы запускаете тест снимка, Jest визуализирует тестируемый компонент React и сохраняет результат в файле JSON. Каждый раз, когда запускается тест, Jest проверяет, что компонент React по-прежнему выводит тот же вывод, что и снимок. Затем, когда вы измените поведение компонента, Jest сообщит вам и:

    • вы поймете, что сделали ошибку, и вы можете исправить компонент так, чтобы он снова соответствовал снимку
    • или, вы сделали это изменение намеренно, и вы можете сказать Jest обновить снимок.

    Этот способ тестирования означает, что:

    • вам не нужно писать много утверждений, чтобы гарантировать, что ваши компоненты React работают должным образом
    • Вы никогда не сможете случайно изменить поведение компонента, потому что Jest поймет.

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

    Чтобы начать тестирование снимков, нам нужен еще один пакет Node. реагирует тест-рендерер это пакет, который может взять компонент React и отобразить его как чистый объект JavaScript. Это означает, что он может быть сохранен в файл, и это то, что Jest использует для отслеживания наших снимков.

    npm install --save-dev реагировать-тест-рендерер

    Теперь давайте перепишем наш первый тест компонента Todo, чтобы использовать снимок. На данный момент, закомментируйте вызовы TodoComponent doneChange, когда todo также нажимается test.

    Первое, что вам нужно сделать, это импортировать реагирующий на тест рендеринг, а также удалить импорт для монтирования. Они не могут быть оба использованы; Вы должны либо использовать один или другой. Вот почему мы прокомментировали другой тест на данный момент.

    импорт рендерера из'act-test-renderer ';

    Теперь я буду использовать визуализатор, который мы только что импортировали, для рендеринга компонента и утверждаю, что он соответствует снимку:

    description ('Компонент Todo правильно отображает задачу', () => {it ('правильно отображает', () => {const todo = {id: 1, done: false, name: 'Buy Milk'}; const render = renderer.create (<Todo todo = {todo} />); ожидаемо (rendered.toJSON ()). toMatchSnapshot ();});});

    При первом запуске Jest достаточно умен, чтобы понять, что для этого компонента нет снимка, поэтому он его создает. Давайте посмотрим на __tests __ / __ снимки __ / todo.test.js.snap:

    export [`Компонент Todo правильно отображает задачу todo 1`] =` <div className = "todo todo-1"> <p className = "toggle-todo" onClick = {[Function]}> Buy Milk </ p> <a className="delete-todo" href="#" onClick= enj[Function]‹> Удалить </a> </ div> `;

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

    <p className = "toggle-todo" onClick = {() => this.toggleDone ()}> {todo.name} </ p>

    Давайте посмотрим, что сейчас говорит Джест:

    FAIL __tests __ / todo.test.js ● Компонент Todo правильно отображает задачу ›правильно отображает ожидаемое (значение) .toMatchSnapshot () Полученное значение не соответствует сохраненному снимку 1. - Снимок + Получено <div className =" todo todo-1 "> - <p - className = "toggle-todo" - onClick = {[Function]}> - Купить молоко - </ p> <a className="delete-todo" href="#" onClick= enj[Function]‹>>>> Удалить </a> </ div> в Object. <Anonymous> (__tests __ / todo.test.js: 21: 31) в process._tickCallback (internal / process / next_tick.js: 103: 7)

    Джест понял, что снимок не соответствует новому компоненту, и сообщает нам об этом. Если мы считаем это изменение правильным, мы можем запустить jest с флагом -u, который обновит снимок. В этом случае, однако, я отменю свои изменения, и Джест снова счастлив.

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

    На самом деле мы не можем проверить взаимодействие наших компонентов Todo с помощью снимков Jest, потому что они не контролируют свое собственное состояние, а вызывают реквизиты обратного вызова, которые им дают. То, что я сделал здесь, это переместил тест снимка в новый файл, todo.snapshot.test.js и оставить наш тест переключения todo.test.js , Я нашел полезным разделить тесты снимков в другой файл; это также означает, что вы не получите конфликтов между Reaction-Test-Renderer и реагировать-аддоны-тест-утилит.

    Помните, что вы найдете весь код, который я написал в этом уроке доступно на GitHub для вас, чтобы проверить и запустить на месте.

    Заключение

    Facebook выпустил Jest давным-давно, но в последнее время его взяли и над ним работали чрезмерно. Это быстро стало фаворитом для разработчиков JavaScript, и будет только лучше. Если вы пробовали Jest в прошлом и вам это не понравилось, я не могу вас подбодрить, чтобы попробовать еще раз, потому что сейчас это практически другая структура. Он быстрый, отлично справляется с перезапуском спецификаций, выдает фантастические сообщения об ошибках и дополняет их всеми функциями моментальных снимков.

    Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь поднимать вопрос на GitHub, и я буду рад помочь. И пожалуйста, обязательно проверьте Шутка на GitHub и начать проект; это помогает сопровождающим.

    Эта статья была рецензирована Дэн Принц а также Кристоф Пожер , Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!

    Похожие

    Разработка графики для сайта или как сделать макет
    Из исследования, которое я разместил несколько месяцев назад в блоге, выяснилось, что вы хотели бы ознакомиться с руководством по созданию макета. Недавно у меня появилась возможность создать макет для перепродажи на сайт ThemeForest и во время его создания я сделал несколько снимков экрана, чтобы показать вам, как я создаю такие макеты. В случае отличной альтернативы, это будет очень хорошо известно
    [2019] Как перенести фотографии с iPhone на флешку или флешку?
    Если вы хотите освободить место на вашем iPhone и сохранить резервную копию фотографий, скопируйте их на внешний жесткий диск. CopyTrans Photo может передавать фотографии и видео с iPhone на любой внешний жесткий диск, USB-флешку или SD-карту. Загрузите CopyTrans Photo на ПК со следующей страницы: Скачать фотографию CopyTrans Установите программу. Если вам нужна помощь в установке CopyTrans Photo,
    Платежи в банкоматах за рубежом - как не понести значительных расходов?
    Отправляясь за границу, будь то для деловых или праздничных целей, мы задаемся вопросом, какую сумму иностранной валюты взять с собой. Очень сложно оценить, сколько мы тратим во время поездки, мы обычно посещаем новые места, поэтому может
    Как скачать видео с YouTube
    YouTube стал настолько популярным сервисом, что часто даже люди, которые не пользуются Интернетом ежедневно, знают о его существовании - самое популярное видео даже появилось на страницах телевизионных новостных сайтов. Сегодня вы узнаете, как загрузить фильм, размещенный на портале другим пользователем, на жесткий диск. Хотя YouTube не использовал потоковое видео в качестве первого, можно с уверенностью сказать, что он произвел революцию в Интернете. Впервые пользователям была предоставлена
    Лучшее бесплатное программное обеспечение для анимации
    Веб-сайтам нужны фильмы, потому что они привлекают внимание, увеличивают удержание клиентов, улучшают SEO-рейтинг и помогают направлять проекты. Бесплатное программное обеспечение для анимации так важно, потому что создание видеороликов для вашего сайта, как правило, очень и очень дорого. К тому времени, когда вы рассчитываете производственные затраты и стоимость декораций, а также потерянное рабочее время (или оплату за актеров), многие люди просто отказываются от идеи и отказываются от всего
    Как удалить DRM из Kindle Books
    Разжечь книги которые вы покупаете у Amazon, защищены DRM, то есть вы можете читать их только в Kindle Reader или в официальном приложении Kindle. Невозможно прочитать купленные вами книги Kindle в других программах для чтения электронных книг, таких как Nook. Amazon применяет меры защиты от копирования на основе DRM для защиты электронных книг Kindle от интернет-пиратства, но, как потребитель, схема DRM ограничивает ваши возможности.
    Как максимально использовать бесплатные бизнес-сервисы Amazon
    ... для Предложения в любое время». Это может быть стандартным CYA со стороны Amazon, но если вы думаете о создании учетной записи бесплатного уровня, вы можете сделать это сейчас и приступить к действию, пока оно доступно. Что вы получаете за свои 0 долларов в месяц? Уровень бесплатного пользования AWS предоставляет вам уровень использования многих компонентов AWS, которого зачастую достаточно для запуска и работы.
    Аутентификация логинов с помощью Active Directory
    у меня есть Redmine установка, которую клиенты хотели, чтобы Redmine аутентифицировал своих пользователей из Windows 2003 Active Directory. Redmine имеет LDAP-аутентификацию, так что это прогулка в парке, верно? Во многом так и было. Настроить Redmine ¶ «Учетная
    Стильный дизайн или сейф как произведение прикладного искусства
    Сейф не должен быть черным металлическим корпусом, спрятанным в шкафу или за картиной. Это вполне может быть декоративным элементом кабинета или спальни и его утонченного вида - заставлять стороннего наблюдателя даже подозревать, что это ультра-безопасный сейф, а не красивый комод. Безопасное произведение искусства? Это возможно - особенно если в его дизайне участвует художник мирового уровня. Таких как Жан Танноус. Этот ливийский (в настоящее
    Как просматривать сайты на Android без рекламы
    Интересный бесплатный инструмент от компании, которая создала AdBlock, только что появился. это интернет-браузер на Android, что позволяет безопасно, без рекламы серфинга в Интернете. Хотите попробовать?
    Как получить противоречивый портрет нового героя Hearthstone?
    Вы можете подумать, что бесплатный портрет героя для бесплатной игры не совсем интересен, но вы ошибаетесь. В эти выходные на Twitchcon Blizzard представила новый портрет героя, Тиранду Шепот ветра. Герой является альтернативным скином для класса Priest и становится бесплатным, когда вы регистрируетесь в Amazon Prime или недавно выпущенном Twitch Prime. Постоянные посетители местной таверны уже знают, что ни одна из этих услуг не доступна на местном уровне, что побудило

    Комментарии

    Как вы снимаете евро со своего виртуального кошелька?
    Тем не менее, вы не хотите расти в Python?
    Тем не менее, вы не хотите расти в Python? Нет проблем, вы можете легко «спуститься» к C, перейти к Ruby (синтаксис очень похож) или перейти к интерфейсу прямо в объятиях JavaScript. Интеграция Python с другими языками? Нет проблем Дополнительные решения? Это также во многих вариантах. Jython или Python, реализованный в Java - работает везде, где работает Java. IronPython, Python реализован в .Net. 5. Зарплата
    Поэтому я опущу даже написание их плюсов и минусов, потому что как насчет того, что они дешевы, так как они не производят почти столько света, сколько нам нужно при выращивании гидропоники?
    Поэтому я опущу даже написание их плюсов и минусов, потому что как насчет того, что они дешевы, так как они не производят почти столько света, сколько нам нужно при выращивании гидропоники? Профессиональное освещение Профессиональное освещение для гидропоники - это то, что было разработано и изготовлено для выращивания растений. Для каждого из следующих типов освещения мы можем быть уверены, что растения будут блестяще расти под ним. Достаточно выбрать мощность по размеру
    Или они будут ждать с полными аппаратными возможностями новых консолей, пока они не будут найдены у достаточного количества покупателей?
    Или они будут ждать с полными аппаратными возможностями новых консолей, пока они не будут найдены у достаточного количества покупателей? Политика публикации самой Microsoft может сыграть здесь ключевую роль, но мы пока не знаем этого. Конкурс якобы не планирует такой широкой совместимости между консолями. Нам никогда не говорили об этом напрямую, что стоит подчеркнуть. Представители Sony, тем не менее, полагают, что PlayStation 5 станет консолью нового поколения в классическом
    Возможно, студент предполагает, что он не может учиться, потому что другие учителя или люди вокруг него убедили его раньше?
    Возможно, студент предполагает, что он не может учиться, потому что другие учителя или люди вокруг него убедили его раньше? Однако эта проблема затрагивает только людей, которые вынуждены изучать языки в школе. Если кто-то подписывается на курс, ищет материалы в Интернете, читает эту статью, значит, он хочет учиться. И если пока что это не удалось, нужно искать главную проблему где-то еще. Давайте перейдем ко второму пункту. Следует ли предполагать, что половина людей
    Мы все знаем, как ввести "@", "$", "&" или обычные "?
    Мы все знаем, как ввести "@", "$", "&" или обычные "?". Тем не менее, есть признаки, так называемые специальные символы или символы , которые нам недоступны непосредственно с клавиатуры - они вводятся несколько более сложным способом. Мы можем сделать это, используя меню: вставить → специальный символ (Open Office 4.1) или вставить → символ → больше символов (MS Word 2013) - мы получаем доступ к Таблице символов
    Вы заходите на сайт и видите сообщение «Страницы не найдены» или «Внутренняя ошибка сервера»?
    Вы заходите на сайт и видите сообщение «Страницы не найдены» или «Внутренняя ошибка сервера»? Нет нервов. Посмотрите, что означают обычные коды ошибок и что вы можете сделать, когда увидите один из них. Давайте начнем с того, что именно является ошибкой 404 и другими «числами», которые мы иногда видим вместо ожидаемого веб-сайта. Проще говоря, связь между вашим браузером и сервером, на котором поддерживается веб-сайт, выглядит следующим образом:
    Тем не менее, они, конечно, не самые продвинутые, и в некотором смысле они являются шагом назад по сравнению с тем, что было раньше - кто помнит удаление кнопки «Вверх» из проводника?
    Тем не менее, они, конечно, не самые продвинутые, и в некотором смысле они являются шагом назад по сравнению с тем, что было раньше - кто помнит удаление кнопки «Вверх» из проводника? Связанные с: 7 лучших ноутбуков и планшетов на Windows 10
    В конце концов, для увлеченных читателей физические книги особенные в том смысле, что ни один цифровой файл никогда не может быть таким, не так ли?
    В конце концов, для увлеченных читателей физические книги особенные в том смысле, что ни один цифровой файл никогда не может быть таким, не так ли? Кусок пластика никогда не может иметь тот же запах, такую ​​же текстуру и тактильные ощущения, как традиционная бумага. Файл электронной книги, безусловно, никогда не может содержать те же воспоминания, что и любимая книга в мягкой обложке. Это только часть истории. То, чего не хватает Kindle в традиционных чарах, это компенсирует
    Как я могу оплатить в интернет-магазине AIDA64?
    Как я могу оплатить в интернет-магазине AIDA64? На веб-сайте вы можете оплатить с помощью кредитной карты или вашей учетной записи PayPal, как через безопасную систему онлайн-платежей PayPal. В некоторых странах PayPal требуется существующая учетная запись PayPal или ее создание для приема платежей с помощью кредитной карты. Если вы покупаете бизнес-продукты, вы также можете выбрать банковский перевод (предоплата). Могу ли я попросить только электронную квитанцию ​​моих
    КАК ПЛАТИТЬ, КАК СОХРАНИТЬ?
    КАК ПЛАТИТЬ, КАК СОХРАНИТЬ? Платежи осуществляются через Интернет, через большую группу операторов, таких как PayPal, Биткойн, кредитные карты (также American Express), WebMoney, а также с помощью G2A Pay, которые можно интегрировать с другой платформой. Клиенты могут оплатить в 42 валютах. Для клиентов с кошельком G2A возможно получить возврат до 10% ! Еще один вариант сохранения - поиск кодов скидок , которые позволят нам сэкономить на покупках.

    Для TDD или не для TDD?
    Для TDD или не для TDD?
    Что вы получаете за свои 0 долларов в месяц?
    Redmine имеет LDAP-аутентификацию, так что это прогулка в парке, верно?
    Безопасное произведение искусства?
    Хотите попробовать?
    Как получить противоречивый портрет нового героя Hearthstone?
    Тем не менее, вы не хотите расти в Python?
    Тем не менее, вы не хотите расти в Python?
    Интеграция Python с другими языками?
    ДОБАВЬ В ЗАКЛАДКУ
    Форма входа
    ДРУЗЬЯ сайта

    Ярмарка Мастеров - ручная работа, handmade
    Способы заработка


    Copyright MyCorp © 2013
    Создать сайт бесплатно