Документация Jest
Установите Jest с помощью предпочитаемого менеджера пакетов:
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev jest
yarn add --dev jest
pnpm add --save-dev jest
bun add --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 test, и Jest выведет это сообщение:
PASS ./sum.test.js ✓ adds 1 + 2 to equal 3 (5ms)
Вы только что успешно написали свой первый тест с помощью Jest!
В этом тесте использовались expect и toBe, чтобы проверить, что два значения полностью совпадают. Чтобы узнать, что еще можно тестировать с помощью Jest, см. раздел Использование сопоставителей.
Запуск из командной строки
Jest можно запускать непосредственно из CLI (если он доступен в глобальной области вашего PATH, например, с помощью yarn global add jest или npm install jest --global), используя различные полезные параметры.
Вот как запустить Jest для файлов, соответствующих шаблону my-test, используя config.json в качестве файла конфигурации и включив системное уведомление по завершении:
jest my-test --notify --config=config.json
Если вы хотите узнать больше о запуске jest через командную строку, ознакомьтесь со страницей Параметры CLI Jest.
Дополнительная конфигурация
Создание базового файла конфигурации
В зависимости от вашего проекта Jest задаст несколько вопросов и создаст базовый файл конфигурации с кратким описанием каждого параметра:
- npm
- Yarn
- pnpm
- Bun
npm init jest@latest
yarn create jest
pnpm create jest
bunx create-jest
Использование Babel
Чтобы использовать Babel, установите необходимые зависимости:
- npm
- Yarn
- pnpm
- Bun
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
bun add --dev babel-jest @babel/core @babel/preset-env
Настройте Babel для целевой версии Node, создав файл babel.config.js в корневом каталоге проекта:
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
Оптимальная конфигурация Babel зависит от вашего проекта. Дополнительные сведения см. в документации Babel.
Настройка Babel с учетом Jest
Если для process.env.NODE_ENV не задано другое значение, Jest установит его в '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 устанавливается автоматически при установке Jest и автоматически преобразует файлы, если в проекте есть конфигурация Babel. Чтобы отключить такое поведение, можно явно сбросить параметр конфигурации transform:
module.exports = {
transform: {},
};
Использование со сборщиками
В большинстве случаев для работы с разными сборщиками не требуется ничего особенного. Исключение составляют случаи, когда у вас есть плагин или конфигурация, которые генерируют файлы, либо заданы пользовательские правила разрешения файлов.
Использование webpack
Jest можно использовать в проектах, где webpack управляет ресурсами, стилями и компиляцией. У webpack есть особенности, создающие определенные сложности по сравнению с другими инструментами. Чтобы начать работу, ознакомьтесь с руководством по webpack.
Использование Vite
Jest не поддерживается Vite из-за несовместимости с системой плагинов Vite.
Примеры интеграции Jest с Vite приведены в библиотеке vite-jest. Однако эта библиотека несовместима с версиями Vite новее 2.4.2.
В качестве альтернативы можно использовать Vitest, API которого совместим с Jest.
Использование Parcel
Jest можно использовать в проектах, где для управления ресурсами, стилями и компиляцией применяется parcel-bundler, аналогично webpack. Parcel не требует настройки. Чтобы начать работу, ознакомьтесь с официальной документацией.
Использование TypeScript
Через babel
Jest поддерживает TypeScript через Babel. Сначала выполните инструкции по использованию Babel, приведенные выше. Затем установите @babel/preset-typescript:
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
bun add --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 с поддержкой source map для Jest, который позволяет использовать Jest для тестирования проектов, написанных на TypeScript.
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev ts-jest
yarn add --dev ts-jest
pnpm add --save-dev ts-jest
bun add --dev ts-jest
Чтобы Jest мог транспилировать TypeScript с помощью ts-jest, возможно, также потребуется создать файл конфигурации.
Определения типов
Есть два способа типизировать глобальные API Jest для тестовых файлов, написанных на TypeScript.
Можно использовать определения типов, поставляемые с Jest и обновляемые при каждом обновлении Jest. Установите пакет @jest/globals:
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @jest/globals
yarn add --dev @jest/globals
pnpm add --save-dev @jest/globals
bun add --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);
});
});
Дополнительные сведения об использовании describe.each/test.each и mock functions см. в документации.
Также можно установить пакет @types/jest. Он предоставляет типы для глобальных объектов Jest, не требуя их импорта.
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @types/jest
yarn add --dev @types/jest
pnpm add --save-dev @types/jest
bun add --dev @types/jest
@types/jest — это сторонняя библиотека, поддерживаемая проектом DefinitelyTyped, поэтому последние возможности и версии Jest могут быть в ней еще не учтены. Старайтесь как можно точнее согласовывать версии Jest и @types/jest. Например, если вы используете Jest 27.4.0, лучше установить 27.4.x версии @types/jest.
Использование ESLint
Jest можно использовать с ESLint без дополнительной настройки, если перед использованием импортировать глобальные вспомогательные функции Jest (describe, it и т. д.) из @jest/globals в файл теста. Это необходимо, чтобы избежать ошибок no-undef от ESLint, который не знает о глобальных объектах Jest.
Если вы хотите обойтись без этих импортов, настройте окружение ESLint, добавив окружение jest для поддержки этих глобальных объектов:
import {defineConfig} from 'eslint/config';
import globals from 'globals';
export default defineConfig([
{
files: ['**/*.js'],
languageOptions: {
globals: {
...globals.jest,
},
},
rules: {
'no-unused-vars': 'warn',
'no-undef': 'warn',
},
},
]);
Или используйте eslint-plugin-jest, который дает аналогичный результат:
{
"overrides": [
{
"files": ["tests/**/*"],
"plugins": ["jest"],
"env": {
"jest/globals": true
}
}
]
}
© 2022 Facebook, Inc.
Licensed under the MIT License.
https://jestjs.io/docs/getting-started