Предполагается, что вы используете Facebook Create React App Boilerplate.

Шутка

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

Тестирование снимков - еще одно отличное дополнение к Jest. Моментальное тестирование, как следует из названия, - это функция, которая позволяет тестировать компоненты, делая снимок того, как компонент должен выглядеть внутренне после его рендеринга.

Фермент

Enzyme - это утилита для тестирования JavaScript для React, которая упрощает тестирование вывода ваших компонентов React. Вы также можете манипулировать, перемещаться и некоторым образом моделировать время выполнения с учетом выходных данных.

Настройка и установка

В терминале или командной строке установите следующие зависимости в существующий проект create-react-app.

npm install enzyme enzyme-adapter-react-16 enzyme-to-json --save-dev

или используя yarn

yarn add enzyme enzyme-adapter-react-16 react-test-renderer enzyme-to-json --dev

Примечание. нам не нужно устанавливать Jest, поскольку CRA входит в состав Jest "из коробки".

Конфигурация

Затем давайте настроим Jest & Enzyme для совместной работы с React.

В каталоге src/ создайте новый файл с именем setupTests.js

import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });

В файле package.json добавьте следующую конфигурацию Jest:

"jest": {
  "snapshotSerializers": ["enzyme-to-json/serializer"],
  "collectCoverageFrom": ["src/**/*.js", "!src/index.js"],
  "coverageReporters": ["text"]
}

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

collectCoverageFrom указывает, для какого набора файлов следует собирать информацию о покрытии. В нашем случае мы ограничили запуск Jest для всех файлов с расширением .js, кроме src/index.js, поскольку обычно это просто шаблонный код, который не нужно тестировать.

coverageReporters указывает jest на вывод отчета о покрытии через терминал вместо создания html-страницы для отображения этих результатов. Разработчику гораздо проще проверить терминал, чтобы понять, где вы находитесь с точки зрения покрытия тестами.

Наш первый тест

Допустим, у нас есть компонент под названием Title.js

import React from 'react';
const Title = ({ children }) => (
  <h1>{children}</h1>
);
export default Title;

Чтобы создать наш первый тест, мы создадим новый файл с именем Title.test.js, он будет размещен рядом с Title.js файлом компонента.

import React from 'react';
import { shallow } from 'enzyme';
import Title from './Title';
const title = 'Test Title';
let wrapped = shallow(<Title>{title}</Title>);
describe('Title', () => {
  it('should render the Title Component correctly', () => {   
    expect(wrapped).toMatchSnapshot();
  });
  it('renders the Titles children', () => { 
    expect(wrapped.find('h1').text()).toEqual(title);
  });
});

Первый блок it создаст новый снимок компонента Title.

Второй блок it выполнит утверждение, чтобы проверить, равно ли значение в h1 переменной с именем title, в которой хранится «Заголовок теста». Если это правда, тест пройдёт.

Запускаем наш первый тест

Введите npm test в корневом каталоге вашего проекта через cmd / terminal. Это запустит все тестовые файлы в проекте CRA и выведет результаты в терминал / cmd.

Результаты теста

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

Заключение

Это было краткое руководство по настройке Jest и Enzyme с существующим create-react-app приложением. Для получения дополнительных примеров того, как использовать Enzyme в полной мере, и для начала изучения того, как использовать Jest и Enzyme с React, обратитесь к официальной документации. Кроме того, ознакомьтесь с этим ускоренным курсом тестирования на Udemy, если вы хотите получить больше практического опыта использования этих инструментов.

Сообщите мне, что вы думаете о Jest / Enzyme и React? Я хотел бы услышать ваше мнение в комментариях ниже.