Как протестировать сайты и приложения React
Как протестировать сайты и приложения React

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

Библиотека тестирования – это группа утилит, которую разработчики используют для написания отдельных тестов для компонентов приложения. Некоторые из основных частей теста:

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

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

01. Начните с библиотеки тестирования React

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

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

npx create-react-app netmag-javascript-testing

02. Решите, что тестировать

Представьте, что у нас есть простой компонент, скажем, кнопка с некоторым состоянием. Какие вещи нужно тестировать в таком компоненте, как этот?

Внешний вид компонента:

Мы не хотим, чтобы что-то неожиданно изменилось после написания нашего компонента. Итак, мы собираемся написать тест снимка, чтобы понять, как он рендерится. Затем, если что-то изменится, мы увидим это быстро без ручного или визуального теста. Это отлично подходит для компонентов, которые состоят из множества более мелких компонентов: вы можете быстро увидеть, когда (и где) его внешний вид был затронут.

Различные ветви, которые делают:

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

Эти функции вызываются как и ожидалось:

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

03. Напишите свой первый тест

(Изображение: © Бен Рид)

Давайте напишем наш первый тест. Создайте новый файл с именем MyComponent.unit.test.js в той же папке, что и компонент. После добавления test.js он будет автоматически выбран библиотекой тестирования. Содержимое этого файла ниже:

import React from ‘react’ import { render } from ‘@testing-library/react’ import MyComponent from ‘./MyComponent’ describe(‘the ’, () => {     // tests go here })

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

Второй аргумент – ваши тесты. описывают () Функция будет запускать все эти тесты один за другим.

 

04. Используйте функцию очистки

Давайте введем вспомогательную функцию под названием beforeEach (), Мы должны использовать это, потому что каждый раз, когда мы что-то делаем с компонентом, нам нужна свежая копия без реквизитов, которые мы ранее передали, все еще существующие в компоненте. Или нам может понадобиться перерисовать компонент: beforeEach () делает это для нас, и мы можем передать ему функцию очистки.

import { render, cleanup } from ‘@testing-library/react’ ... describe(‘the component should render’, () => {   beforeEach(cleanup) }

05. Написать тест снимка

(Изображение: © Бен Рид)

На этом шаге мы собираемся «смонтировать» наш компонент (или отрендерить его).

describe(‘the component should render’, () => {   beforeEach(cleanup)   it(‘renders with basic props’, () => {     render()   }) }

Этот рендер предоставляет нам доступ ко всем отображаемым свойствам скомпилированного компонента. Это может быть хорошо, чтобы бросить это в console.log () так что вы можете увидеть более четко, что он делает.
Если вы это сделаете, вы увидите, что есть несколько полезных свойств, которыми мы можем воспользоваться здесь. Я собираюсь сделать утверждение (сделать тестируемое объявление) и проверить его, извлекая контейнер. Контейнер «содержит» узлы DOM (весь HTML), связанные с компонентом.
it(‘renders with basic props’, () => {     const { container } = render() })

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

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

06. Тест свойств

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

Добавьте следующий объект в начало вашего файла:

const lightProperties = {     backgroundColour: ‘white’,     textColour: ‘darkblue’ }

Мы определяем свойства объекта и затем используем оператор распространения (три точки, за которыми следует имя объекта: … lightproperties) потому что мы можем передать только один аргумент при рендеринге таким образом. Также полезно посмотреть, какие свойства вы передаете изолированно:

it(‘renders with basic props’, () => {         const { container } = render(       )      expect(container).toMatchSnapshot()     })     it(‘renders with the light version props’, () => {         const { container } = render(                      )         expect(container).toMatchSnapshot()     }) 

07. Тест изменений в пользовательском интерфейсе

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

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

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

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

const modeToggle = () => {     const (mode, setMode) = useState(‘light’)    const toggleTheme = () => {      if (theme === ‘light’) {        setTheme(‘dark’)      } else {        setTheme(‘light’)      }    }     return (                    Toggle mode              ) } 

Во-первых, мы должны добавить тестовый идентификатор на кнопку, чтобы мы могли найти его в фазе рендеринга:

return (            Toggle mode      

Вы заметили, что мы добавили новый атрибут данная TestID на кнопку? Вот как вы можете это проверить. Сначала импортируйте новую функцию fireEvent из библиотеки тестирования:

import { cleanup,            fireEvent,            render  } from ‘@testing-library/react’ 

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

it(‘renders with basic props’, () => {     const { container } = render(   )  expect(container).toMatchSnapshot() }) it(‘renders the light UI on click’, () => {     const { container, getByTestId } = render()     fireEvent.click(getByTestId(‘mode-toggle’))     expect(container).toMatchSnapshot() })

Это здорово: нам не нужно вручную заходить на сайт и осматриваться, затем нажимать кнопку и осматриваться второй раз – во время которого, вы можете признать, вы, вероятно, забудете или пропустите что-то! Теперь мы можем быть уверены, что при одинаковом входном сигнале мы можем ожидать такой же выходной сигнал в нашем компоненте.Когда дело доходит до проверки идентификаторов, мне лично не нравится использовать данная TestID найти что-то в DOM. В конце концов, цель тестов – имитировать то, что делает пользователь, и тестировать, что происходит, когда он это делает. данная TestID Это похоже на читерство – хотя данные, скорее всего, пригодятся вашему инженеру по обеспечению качества (см. раздел «Роль инженеров по обеспечению качества»).Вместо этого мы могли бы использовать getByText () и передать текст нашей кнопки. Этот метод будет более специфичным для поведения.

08. Шутка и шпионская функция

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

Мне не нужно проверять, каков результат этого модуля. Мне нужно проверить, что моя функция работает, как ожидалось. Для получения дополнительной информации о причинах этого см. Раздел «Тесты модулей и интеграции». В этом случае мы могли бы «смоделировать» эту функцию:

const getPiValue = jest.fn() it(‘calls the function on click’, () => {     const { container, getByTestId } = render()     fireEvent.click(getByTestId(‘mode-toggle’))     expect(getPiValue).toHaveBeenCalledTimes(1)   ) })

Функция toHaveBeenCalledTimes () является одной из многих вспомогательных функций в библиотеке тестирования, которые позволяют нам

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

09. Начать тестирование приложений React

(Изображение: © React Testing Library)

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

Чтобы узнать больше о том, как протестировать свои компоненты, посетите Библиотека тестирования React или примеры тестирования React, Если вы ищете какие-то курсы, которые помогут вам начать работу, один из них Кент К Доддс (который написал и поддерживает React Testing Library) популярен. Мне также понравился этот материал в «Учебниках повышения уровня», именно он заставил меня начать писать тесты для своего кода.

Лучшие приложения для изучения языка для креативщиков
Лучшие приложения для изучения языка для креативщиков

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

Это очень легко начать изучать новый язык. В последнее время изучение языка переросло в мрачные дни классных досок, древних учебников и рутинного обучения. Теперь это весело, с гибкими подходами, которые могут быть удивительно эффективными. Приложения для изучения языка значительно улучшились, как и приложения в целом (см. Наши лучшие приложения для iPad для дизайнеров, если вы нам не верите).

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

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

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

01. Бусуу

- Лучшие приложения для изучения языка для креативщиков

Busuu копирует традиционную учебную программу (Изображение предоставлено: Busuu)
  • Плюсы: Практика во всех областях изучения языка, легко отслеживать ваши успехи
  • Cons: Можно сделать с большим количеством повторений
  • Платформа: iOS, Android, веб
  • Цена: Бесплатно, Премиум от $ 7.99 / £ 5.83

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

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

Если вы ищете повторение занятий в классе, но не можете посещать курсы два или три раза в неделю, то Busuu, вероятно, является языковым приложением для вас.

02. Дуолинго

- Лучшие приложения для изучения языка для креативщиков

Duolingo абсолютно бесплатен, но это не единственная причина, по которой он популярен (Изображение предоставлено Duolingo)
  • Плюсы: Бесплатно. Весело и легко в использовании.
  • Минусы: Уроки могут быть совершенно случайными. Отсутствие объяснений.
  • Платформа: Интернет, iOS, Android, Windows 10
  • Цена: Бесплатно

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

Подход Duolingo состоит в том, чтобы погрузить вас в язык от слова го. Это делается полностью через серию вопросов с множественным выбором, основанных на тексте, изображениях и аудио. Как и в реальном мире, когда вы находитесь в стране, язык которой вы не знаете, вы должны разобраться и найти правильный ответ с помощью образованных догадок.

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

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

Duolingo бесплатен, и у него немало возможностей

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

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

Это может заставить вас чувствовать, что вы упускаете важные фрагменты того, что вам нужно знать, что может дезориентировать вас. Кроме того, поскольку нет реальных уроков или объяснений, это также может расстраивать, когда вы просто не понимаете, почему конкретный ответ является правильным или неправильным.

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

03. Лингвист

- Лучшие приложения для изучения языка для креативщиков

Лингвист охватывает только четыре языка, но делает их все очень хорошо (Изображение предоставлено Lingvist)
  • Плюсы: Хорошие объяснения. Выберите то, что вы изучаете.
  • Минусы: Всего четыре языка. Нет бесплатной версии.
  • Платформа: Интернет, iOS, Android
  • Цена: От £ 5.83 в месяц (годовой план)

Lingvist – еще одно приложение, которое помогает вам преодолеть ряд трудностей. Оно немного серьезнее и лучше структурировано, чем Duolingo, что может быть хорошим или плохим в зависимости от вашей перспективы.

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

Кроме того, в отличие от Duolingo, Lingvistalso предлагает подробные объяснения грамматических правил, а затем ставит задачи, чтобы убедиться, что вы их поняли.

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

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

04. Баббель

- Лучшие приложения для изучения языка для креативщиков

Babbel предлагает уникальный курс для каждого языка (Изображение предоставлено Babbel)
  • Плюсы: Практическая направленность. Уникальный курс для каждого языка.
  • Минусы: Не бесплатно. Не особенно “весело”.
  • Платформа: Интернет, iOS, Android
  • Цена: От £ 4.75 – £ 9.99 / месяц

Babbel – это сервис на основе подписки; Существует бесплатная версия, но в основном она дает вам доступ к первому уроку на каждом курсе.

В настоящее время приложение предлагает 14 языков: голландский, датский, английский, французский, немецкий, индонезийский, итальянский, норвежский, польский, бразильский португальский, русский, шведский, испанский и турецкий.

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

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

Дизайн довольно минимален. То, как вы учитесь, довольно стандартно: смесь карточек и тестов с несколькими вариантами ответов. И в целом тон приложения немного … ну, скучно.

Но с другой стороны, у Баббелла есть реальное чувство академической строгости, серьезности и эффективности. И когда вы комбинируете это с практической и контекстуальной природой того, что вы действительно изучаете, это может быть все, что вам действительно нужно.

05. Розеттский камень

- Лучшие приложения для изучения языка для креативщиков

Самое старое имя в игре, Rosetta Stone по-прежнему набирает силу (Изображение предоставлено: Rosetta Stone)
  • Плюсы: Можно получить доступ к урокам в автономном режиме. Вариант для индивидуальных занятий.
  • Минусы: Дорогой. Погружающий подход может не подойти.
  • Платформа: Интернет, iOS, Android
  • Цена: От £ 9 до £ 16 / месяц

Rosetta Stone, прадедушка всего программного обеспечения для изучения языков, существует уже несколько десятилетий: его первый CD-Rom был выпущен в 1992 году. И из-за высокого признания его имени компания взимает более высокие цены за свои курсы, чем практически все остальные.

Уроки доступны как в браузере, так и через приложения для Android и iOS, которые позволяют загружать уроки, чтобы следовать в автономном режиме. Кроме того, если вы хотите платить больше, вы можете добавить к своему курсу онлайн-уроки в режиме реального времени, либо в рамках группового занятия, либо в рамках индивидуального индивидуального занятия.

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

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

06. Капли

- Лучшие приложения для изучения языка для креативщиков

Drops не научит вас целому языку, но он отлично подходит для быстрого набора словарного запаса, быстро (Изображение предоставлено: Капли)
  • Плюсы: Отлично подходит для Vocab. Красиво оформленный.
  • Минусы: Не учит грамматике. Бесплатная версия очень ограничена.
  • Платформа: iOS, Android
  • Цена: Премиум-версия от £ 2.50 / месяц

Хотите узнать словарный запас, короткими очередями, когда вы можете уделить пять минут на вашем телефоне? Тогда Drops для вас.

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

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

Бесплатная версия включает в себя рекламу и предлагает вам пятиминутный сеанс каждые 10 часов (так что теоретически два раза в день, если вы правильно рассчитаете время). Это не так много, и, конечно, это не так. Но сама срочность этого короткого периода может чудесно сфокусировать ваш разум. Или вы можете заплатить за Премиум режим, который разблокирует неограниченное время, а также удаляет рекламу и разрешает автономный доступ.

Do NOT follow this link or you will be banned from the site!
WeCreativez WhatsApp Support
Наша служба поддержки клиентов готова ответить на ваши вопросы.
Привет, чем я могу помочь?