Spec-Zone.ru › Jest

Документация 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.config.js

Оптимальная конфигурация 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.config.js
примечание

babel-jest устанавливается автоматически при установке Jest и автоматически преобразует файлы, если в проекте есть конфигурация Babel. Чтобы отключить такое поведение, можно явно сбросить параметр конфигурации transform:

module.exports = {
  transform: {},
};
jest.config.js

Использование со сборщиками

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

Использование 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',
  ],
};
babel.config.js

Однако при использовании 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);
  });
});
sum.test.ts
совет

Дополнительные сведения об использовании 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API