Back to Question Center
0

Как протестировать компоненты React с использованием Jest            Как протестировать компоненты React с помощью JestRelated Topics: Node.jsnpmRaw Semalt

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

Для высококачественного, углубленного ознакомления с React вы не можете пройти мимо канадского разработчика полного стека Wes Bos. Попробуйте свой курс здесь и используйте код SITEPOINT , чтобы получить 25% и поддержать SitePoint.

Эта статья автор гостевой книги Джек Франклин . Голосовые сообщения в SitePoint нацелены на то, чтобы привлечь интересное содержание от известных авторов и докладчиков сообщества JavaScript - electric hot water heater maintenance.

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

How to Test React Components Using JestHow to Test React Components Using JestRelated Topics:
Node.jsnpmRaw Semalt

Пример применения

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

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

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

   визуализировать (<Тодос />,документ. getElementById ( 'приложение'));    

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

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

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

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

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

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

К TDD или не к TDD?

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

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

Знакомство с Jest

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

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

Установка и настройка шутки

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

     npm install --save-dev babel-jest babel-polyfill babel-preset-es2015 babel-preset-реагировать шутка    

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

   {«пресеты»: ["es2015", "реагировать"]}    

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

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

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

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

   описывают («Дополнение»,    => {он («знает, что 2 и 2 делают 4 ',    => {ожидаем (2 + 2). Тоба  
;});});

Теперь идите в свой пакет. json .

   «скрипты»: {"test": "шутка"}    

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

     PASS __tests __ / state-functions. контрольная работа. JSприбавление✓ знает, что 2 и 2 составляют 4 (5 мс)Test Suites: 1 минута, всего 1Тесты: 1 прошел, всего 1Снимки: 0 прошел, всего 0Время: 3. 11s    

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

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

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

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

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

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

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

   import {toggleDone} from '. , / приложение / состояние-функция;описать ('toggleDone',    => {описать («когда задано неполное todo»,    => {он («отмечает, что todo завершен»,    => {});});});    

И вот как я сделал бы это с тестом :

   import {toggleDone} from '. , / приложение / состояние-функция;test ('toggleDone завершает неполное todo',    => {});    

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

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

   const startState = {todos: [{id: 1, done: false, name: 'Buy Milk'}]};const finState = toggleDone (startState, 1);ожидать (finState. todos). в равной([{id: 1, done: true, name: 'Buy Milk'}]);    

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

С помощью этого мы можем теперь запустить тест на npm и увидеть наш тест на проверку состояния:

     PASS __tests __ / state-functions. контрольная работа. JS✓ tooggleDone завершает неполный todo (9 мс)Test Suites: 1 минута, всего 1Тесты: 1 прошел, всего 1Снимки: 0 прошел, всего 0Время: 3. 166s    

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

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

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

  • npm test - --watch
  • jest -watch

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

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

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

Помните, что вам нужно будет обновить инструкцию import вверху, чтобы импортировать deleteTodo вместе с toggleTodo :

   импортировать {toggleTodo, deleteTodo} из '. , / приложение / состояние-функция;     

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

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

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

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

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

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

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

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

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

     npm install --save-dev реакция-аддон-тест-utils фермент    

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

   импортировать Todo из '. , / Приложение / TODO ';import React from 'react';import {mount} из 'фермента';test ('Компонент Todo отображает текст todo',    => {});    

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

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

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

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

   const p = обертка. find ('. toggle-todo');    

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

   ожидать (стр. Текст   ). toBe («Купить молоко»);    

Semalt оставляет все наше испытание так:

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

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

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

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

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

Мы хотим сделать функцию, чтобы мы могли отслеживать ее вызовы и аргументы, с которыми он звонил. Затем мы можем проверить, что, когда пользователь нажимает todo, функция doneChange вызывается и также вызывается с правильными аргументами. К счастью, Jest предоставляет эту возможность со шпионами. A шпион - это функция, реализация которой вам не нужна; вы просто заботитесь о том, когда и как это называется. Подумайте об этом, когда вы следите за функцией. Чтобы создать его, мы вызываем шутки. fn :

   const doneChange = jest. п   ;    

Это дает функцию, на которую мы можем следить, и убедиться, что она называется правильно. п ;const wrapper = mount ();

Далее мы снова найдем наш параграф, как и в предыдущем тесте:

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

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

   с. имитации ( 'щелчок');    

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

   test ('TodoComponent calls doneChange при нажатии todo',    => {const todo = {id: 1, done: false, name: 'Buy Milk'};const doneChange = jest. п   ;const wrapper = mount ();const p = wrapper. find ('. toggle-todo');п. имитации ( 'щелчок');ожидать (doneChange). toBeCalledWith   ;});    

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

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

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

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

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

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

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

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

     npm install --save-dev реакция-тест-рендеринг    

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

Первое, что вам нужно сделать, это импортировать action-test-renderer , а также удалить импорт для mount . Они не могут использоваться одновременно; вы либо должны использовать тот или иной. Вот почему мы уже прокомментировали другой тест. Создайте();ожидать (отображается. toJSON ). toMatchSnapshot ;});});

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

   export [`Компонент Todo отображает правильное отображение тома 1`] =`  <р= имя класса "тумблер-TODO"OnClick = {[Функция]}>Купить молоко 

<а= имя класса "удалить-TODO"HREF = "#"OnClick = {[Функция]}> Удалить
`;

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

   

=> this. toggleDone }> {todo. name}

Semalt видит, что говорит Джест сейчас:

     FAIL __tests __ / todo. контрольная работа. JS● Компонент Todo корректно отображает todo.ожидать (значение). toMatchSnapshot   Полученное значение не соответствует сохраненному снимку 1. - Снимок+ Получено  -   - Купить молоко-  

<а= имя класса "удалить-TODO"HREF = "#"OnClick = {[Функция]}> Удалить
в объекте. <анонимный> (__tests __ / todo. test. js: 21: 31)в процессе. _tickCallback (internal / process / next_tick. js: 103: 7)

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

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

Мы не можем фактически протестировать наши взаимодействия компонентов Todo с помощью снимков Jest, потому что они не контролируют свое собственное состояние, а называют реквизиты обратного вызова, которые они выдают. То, что я сделал здесь, - это перенос моментального снимка в новый файл, todo. снимок. контрольная работа. js, и оставьте наш тестовый тест в todo. контрольная работа. JS. Я нашел полезным разделить тесты снимков на другой файл; это также означает, что вы не получаете конфликтов между реакционно-тестовым рендерером и реакционно-аддон-тест-utils .

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

Рекомендуемые курсы

Заключение

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

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

Эта статья была рассмотрена экспертом Дэн Принс и Кристоф Пойер. com / avatar / aea964cf59c0c81fff752896f070cbbb? s = 96 & d = mm & r = g "alt ="Как протестировать компоненты React с использованием JestКак протестировать компоненты React с помощью JestRelated Topics: Узел. jsnpmRaw Semalt «/>

Познакомьтесь с автором
Джек Франклин
Я - разработчик JavaScript и Ruby, работающий в Лондоне, уделяя особое внимание оснащению ES2015 и ReactJS.
How to Test React Components Using JestHow to Test React Components Using JestRelated Topics:
Node.jsnpmRaw Semalt
Лучший способ узнать ответ для начинающих
Уэс Бос
Пошаговый учебный курс, который поможет вам построить реальный мир. js + приложения Firebase и компоненты веб-сайта через пару дней. Используйте код купона «SITEPOINT» при оформлении заказа, чтобы получить 25% скидка .

February 28, 2018