Начало работы
Установите Jest используя ваш любимый менеджер пакетов:
- npm
- Yarn
- pnpm
npm install --save-dev jest
yarn add --dev jest
pnpm add --save-dev jest
Для начала напишем тест для функции, которая складывает два числа. Во-первых создайте файл sum.js
:
function sum(a, b) {
return a + b;
}
module.exports = sum;
Затем создайте файл с именем sum.test.js
. Он будет содержать сам тест:
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Доб авьте следующий раздел в package.json
:
{
"scripts": {
"test": "jest"
}
}
Наконец, запустите yarn test
или npm run test
и Jest выведет это сообщение:
PASS ./sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)
Вы только что успешно написали первый тест с использованием Jest!
Данный тест использует expect
и toBe
для проверки идентичности двух данных значений. Чтобы узнать об остальных вещах, которые можно протестировать с использованием Jest, смотрите использование сопоставлений.
Запуск из командной строки
Вы можете запустить Jest прямо из командной строки (если он глобально доступен в PATH
, например yarn global add jest
или npm install jest --global
) с множеством полезных опций.
Вот так можно запустить Jest для проверки файлов совпадающих с my-test
, используя config.json
в качестве файла конфигурации и для отображения нативного уведомления ОС после завершения:
jest my-test --notify --config=config.json
Если вы хотите узнать больше о работе с jest
в командной строке, обратите внимание на страницу параметров командной строки Jest.
Дополнительная конфигурация
Создание базового файла конфигурации
Исх одя из ваших нужд, Jest задаст вам несколько вопросов и создаст базовый файл конфигурации с кратким описанием для каждой опции:
- npm
- Yarn
- pnpm
npm init jest@latest
yarn create jest@latest
pnpm create jest@latest
С использованием Babel
Для использования с Babel, установите необходимые зависимости через yarn:
- npm
- Yarn
- pnpm
npm install --save-dev babel-jest @babel/core @babel/preset-env
yarn add --dev babel-jest @babel/core @babel/preset-env
pnpm add --save-dev babel-jest @babel/core @babel/preset-env
Настройте Babel на вашу текущую версию Node Js, создав файл babel.config.js
в корне вашего проекта:
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
Идеальная конфигурация Babel будет зависеть от вашего проекта. Дополнительную информацию см. в документации Babe.l.
Добавление отдельной конфигурации для Babel только на время запуска Jest
Jest автоматически установит для process.env.NODE_ENV
значение 'test'
если не указано другое. Вы можете использовать эту опцию, чтобы добавить настройки, которые будут использоваться только во время запуска Jest, например:
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.
return {
// ...
};
};
babel-jest
is automatically installed when installing Jest and will automatically transform files if a babel configuration exists in your project. Для обхода данного поведения, вы можете явно сбросить опцию transform
в конфи гурации:
module.exports = {
transform: {},
};
С использованием Webpack
Jest может использоваться в проектах, использующих webpack для управления ресурсами, стилями и компиляцией. Webpack действительно привносит некоторые особенности, способные создать проблемы программистам, в сравнении с другими инструментами. Обратитесь к разделу руководство по работе с Webpack для начала работы с ним.
Using Vite
Jest can be used in projects that use vite to serve source code over native ESM to provide some frontend tooling, vite is an opinionated tool and does offer some out-of-the box workflows. Jest is not fully supported by vite due to how the plugin system from vite works, but there are some working examples for first-class jest integration using vite-jest
, since this is not fully supported, you might as well read the limitation of the vite-jest
. Refer to the vite guide to get started.
Using Parcel
Jest может использоваться в проектах, использующих parcel-bundler для управления изображениями, стилями и компиляцией аналогично webpack Parcel не требует настройки Обратитесь к официальной документации для начала работы.
С использованием TypeScript
Через babel
Jest поддерживает TypeScript, через Babel. Сначала убедитесь, что вы следовали инструкциям по настройке Babel выше. Далее установите @babel/preset-typescript
:
- npm
- Yarn
- pnpm
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
Затем добавьте @babel/preset-typescript
в список пресетов в ваш babel.config.js
.
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
Однако, есть несколько подводных камней в использовании TypeScript вместе с Babel. Поскольку TypeScript поддерживается в Babel через транспиляцию, Jest не будет проверять типы ваших тестах когда они запущены. Если вы хотите, то вы можете использовать ts-jest взамен, или просто запустите компилятор TypeScript tsc отдельно (или как часть вашего процесса сборки).
Через ts-jest
ts-jest это препроцессор TypeScript с поддержкой исходных карт Jest, который позволяет использовать Jest для тестирования проектов, написанных на TypeScript.
- npm
- Yarn
- pnpm
npm install --save-dev ts-jest
yarn add --dev ts-jest
pnpm add --save-dev ts-jest
In order for Jest to transpile TypeScript with ts-jest
, you may also need to create a configuration file.
Определения типов
There are two ways to have Jest global APIs typed for test files written in TypeScript.
You can use type definitions which ships with Jest and will update each time you update Jest. Install the @jest/globals
package:
- npm
- Yarn
- pnpm
npm install --save-dev @jest/globals
yarn add --dev @jest/globals
pnpm add --save-dev @jest/globals
И импортируйте API из него:
import {describe, expect, test} from '@jest/globals';
import {sum} from './sum';
describe('sum module', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
});
See the additional usage documentation of describe.each
/test.each
and mock functions
.
Or you may choose to install the @types/jest
package. It provides types for Jest globals without a need to import them.
- npm
- Yarn
- pnpm
npm install --save-dev @types/jest
yarn add --dev @types/jest
pnpm add --save-dev @types/jest
@types/jest
is a third party library maintained at DefinitelyTyped, hence the latest Jest features or versions may not be covered yet. Try to match versions of Jest and @types/jest
as closely as possible. For example, if you are using Jest 27.4.0
then installing 27.4.x
of @types/jest
is ideal.
Использование ESLint
Jest может использоваться с ESLint без дальнейшей конфигурации при импорте Jest global helpers (Описание
, это
, и т. д.) из @jest/globals
перед использованием их в вашем тестовом файле. Это необходимо для того, чтобы избежать ошибок no-undef
от ESLint, которые не знают о глобальных системах Jest.
If you'd like to avoid these imports, you can configure your ESLint environment to support these globals by adding the jest
environment:
{
"overrides": [
{
"files": ["tests/**/*"],
"env": {
"jest": true
}
}
]
}
Or use eslint-plugin-jest
, which has a similar effect:
{
"overrides": [
{
"files": ["tests/**/*"],
"plugins": ["jest"],
"env": {
"jest/globals": true
}
}
]
}