Когда я начал писать тесты для моего приложения React Application, это потребовало меня несколько попыток, прежде чем я понял, как настроить мою среду тестирования, используя Jest & Фермент Отказ В этом руководстве предполагается, что у вас уже есть приложение React Application с WebPack & варить . Мы продолжим оттуда.
Это часть серии статей, которые я написал. Я говорю о том, как создать приложение React для производства правильного и простого способа.
- Часть 1 Как объединить WebPack 4 и Babel 7, чтобы создать фантастическое приложение React (Переговоры о настройке WebPack с Babel вместе с поддержкой .scssss)
- Часть 2 Эти инструменты помогут вам написать чистый код (Переговоры о автоматизации вашего кода, так что весь код, который вы пишете, это хороший код)
- Это Часть 3 В котором я буду говорить о создании шума с ферментом.
Прежде чем мы начнем, если в любое время вы чувствуете застрявшие, пожалуйста, не стесняйтесь проверять Репозиторий кода Отказ PR очень приветствуется, если вы чувствуете, что все могут быть улучшены.
Предпосылка
Вам необходимо установить узел для использования NPM (Manager Unode Package).
Первые вещи сначала создают папку под названием приложение Затем откройте свой терминал и войдите в это приложение Папка и тип:
npm init -y
Это создаст package.json Файл для вас. В вашем package.json Файл Добавить следующее:
{
"name": "react-boiler-plate",
"version": "1.0.0",
"description": "A react boiler plate",
"main": "src/index.js",
"author": "Adeel Imran",
"license": "MIT",
"scripts": {
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage --colors",
},
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/polyfill": "^7.0.0-beta.51",
"@babel/preset-env": "^7.0.0-beta.51",
"@babel/preset-react": "^7.0.0-beta.51",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^23.4.2",
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.1",
"jest": "^23.4.2"
}
}Второе создайте папку под названием SRC В вашем приложение папка. SRC/App/ Папка – это то, где весь ваш реактивный код вместе с его тестом будет находиться. Но До этого давайте понять, почему мы сделали то, что мы сделали в нашем package.json файл.
Я поговорю о Скрипты в немного (обещание). Но до этого давайте узнаем, почему нам нужны следующие зависимости. Я хочу, чтобы вы знали, что идет внутри вашего Package.json. Итак, начнем.
@ Babel/Core Поскольку обычно используем WebPack для компиляции нашего React Code. Babel – это серьезная зависимость, которая помогает сообщить WebPack, как скомпилировать код. Это однократная зависимость для использования шума.
@ Babel/Polyfill Jest требует, чтобы вещь называлась Регенератор-время выполнения @ Babel/Polyfill приходит встроенный с ним и некоторые другие прохладные черты.
@ Babel/Preset-Env & @ Babel/Preset-React Для функций, таких как ES6 и реагирует, поэтому во время написания модульных тестов Jest Знает о ES6 синтаксис и Jsx.
Babel-Core Это в основном зависимость для Шума , как нам нужно Babel-Core для шума на работу.
Бабел-шутмай Поможет Вавилону понять код, который мы пишем в Шума
фермент Это библиотека утверждения, которая облегчает утверждение, манипулировать и пройти выходные данные реагирования компонентов.
Фермент-адаптер-реагирование-16 Адаптер/средняя посуда, чтобы помочь шутить с фермент
jest Jest – это тестовая библиотека, на которой мы будем работать наши тесты.
Вы можете взглянуть на очень простой пример голыми костными людьми классными людьми на jest. Он использует Babel, чтобы запустить простой тест здесь Отказ
Также, если вы хотите Настройка WebPack для React Это подробный прохождение о том, как я это сделал. Или вы можете просто пройти через все базу кода, которая использует основные голые кости структуры тому, что вам понадобится при настройке приложения React наряду с шумом/ферментом ( Starter-kit здесь ).
Давайте давайте создадим файл под названием jest.config.js В нашем главном приложение Папка и добавьте следующий код к нему. Я расскажу о том, что это делает немного.
// For a detailed explanation regarding each configuration property, visit:
// https://jestjs.io/docs/en/configuration.html
module.exports = {
// Automatically clear mock calls and instances between every test
clearMocks: true,
// An array of glob patterns indicating a set of files for which coverage information should be collected
collectCoverageFrom: ['src/**/*.{js,jsx,mjs}'],
// The directory where Jest should output its coverage files
coverageDirectory: 'coverage',
// An array of file extensions your modules use
moduleFileExtensions: ['js', 'json', 'jsx'],
// The paths to modules that run some code to configure or set up the testing environment before each test
setupFiles: ['/enzyme.config.js'],
// The test environment that will be used for testing
testEnvironment: 'jsdom',
// The glob patterns Jest uses to detect test files
testMatch: ['**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)'],
// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
testPathIgnorePatterns: ['\\\\node_modules\\\\'],
// This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
testURL: 'http://localhost',
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
transformIgnorePatterns: ['/node_modules/'],
// Indicates whether each individual test should be reported during the run
verbose: false,
}; Второе создайте файл под названием enzyme.config.js В вашем главном приложение Папка и добавьте следующий код к нему.
/** Used in jest.config.js */
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });Давайте сначала поговорим о jest.config.js.
Clearmocks очистите все издевательства, так что издевательства в nth Тест не мутирует или не влияет на тест на N + 1 позиция.
CollectcoverageFrom Оказывает, что Jest собирать покрытие кода со всех файлов .js в SRC/ папка. Охват сообщает вам, какой процент кода охватывается вашими тестовыми случаями.
Coverageedirectory Рассказывает, что каталог охвата должен быть назван Охват В главном приложение/ папка.
Modulefileextensions Принимает в массиве расширений, которые сообщают, что это может проверить, какие файлы могут тестировать. Мы говорим, чтобы проверить все .js | .jsx | .json файлы.
setupfiles Это действительно важно, так как он говорит о том, как он говорит путь от того, где он может получить конфигурации для фермента (больше на это позже)
TestenVironment Указывает, какую среду шума проведет свою проверку, поскольку мы тестируем веб-приложение. Я установил окружающую среду в jsdom.
Testmatch Рассказывает, что файлы будут тестировать. Я прохожу в 2 конфигурациях здесь, один из которых тестируйте все файлы в любой папке с именем __tests__ или проверьте все файлы, которые заканчиваются spec.js | .jsx. или test.js | .jsx.
TestPathignOREPatterns Я не хочу, чтобы шутить, чтобы запустить тесты внутри моего Node_Modules папка. Поэтому я проигнорировал эти файлы здесь.
testurl Эта опция устанавливает URL для среды JSDOD. Это отражено в свойствах, таких как местоположение.href
TransformigneReorePatterns Массив монтажных строк RegexP, которые сопоставляются со всеми путями исходных файлов, соответствующие файлы будут пропускать преобразование. Здесь я даю это только один за node_modules.
Verbose Если true дает вам очень подробный журнал, когда вы запустите тесты. Я не хочу видеть это и сосредоточиться только на велом моих тестах. Поэтому я установил свою ценность в ложный
Давайте поговорим о enzyme.config.js.
Я передаю путь enzyme.config.js В моем setupfiles в шумах настраиваний. Когда он идет к этому файлу, шутки занимают ферментные конфигурации. Так что это означает, что все тесты будут работать на шуме. Но утверждения и все остальное будет сделано ферментом.
С этим на месте наши конфигурации сделаны. Давайте поговорим о скриптах:
"scripts": {
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage --colors",
},NPM запустить тест Это будет запустить шутки и выполнять все тесты
Испытание NPM Run: смотреть Запустит все тесты и сохраняйте в режиме наблюдения, так что когда мы внесем какие-либо изменения в наши тестовые случаи, он снова выполнит эти тестовые случаи.
Испытание NPM Run: охват Создает отчет о покрытии, основанном на всех тестах, которые он выполняет, и предоставляет вам подробный отчет о покрытии в приложение/покрытие папка.
Прежде чем мы запустим тест, нам нужно создать один. Итак, начнем. В вашем Приложение/SRC/ Папка создает файл под названием Welcomessage.js Отказ
import React, { Fragment } from 'react';
const styles = {
heading: {
color: '#fff',
textAlign: 'center',
marginBottom: 15,
},
logo: {
width: 250,
heading: 250,
objectFit: 'cover',
},
};
const WelcomeMessage = ({ imgPath }) => {
return (
Welcome To
);
};
export default WelcomeMessage;В той же папке создать файл под названием Welcomessage.test.js.
import React from 'react';
import { shallow } from 'enzyme';
// Components
import WelcomeMessage from './WelcomeMessage';
function setup() {
const props = {
imgPath: 'some/image/path/to/a/mock/image',
};
const wrapper = shallow( );
return { wrapper, props };
}
describe('WelcomeMessage Test Suite', () => {
it('Should have an image', () => {
const { wrapper } = setup();
expect(wrapper.find('img').exists()).toBe(true);
});
});Одно следует отметить, что вы не сможете на самом деле запускать Welcommessage.js Файл, так как у вас нет WebPack Настройте с Бабел Отказ Если вы ищете способ установить это, проверьте мой учебник на Как объединить WebPack 4 и Babel 7, чтобы создать фантастическое приложение для реагирования Отказ Кроме того, если вы просто хотите исходный код в этот учебник, вот Репозиторий кода Отказ У него уже есть шутка и фермент. Не стесняйтесь сделать вилку и начать играть с базой кода.
Возвращаясь к коду, мы просто написали, в вашем терминале типа NPM запустить тест Отказ Он будет выполнять скрипт и находить все файлы, которые заканчиваются * .est.js и выполнить их. После того, как он выполнил, вы увидите такое сообщение:
Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total
Теперь я знаю, что это не большая часть практического теста на единицу, но я хотел, чтобы этот учебник сосредоточиться на чисто настраивании шума и фермента.
Опять вот исходный код для этого Учебное пособие Отказ
Оригинал: “https://www.freecodecamp.org/news/how-to-set-up-jest-enzyme-like-a-boss-8455a2bc6d56/”