Skip to content
Vitest 1
Main Navigation РуководствоAPIКонфигурацияПродвинутый
1.6.1
0.34.6

Русский

English
简体中文
繁體中文
Español
Français
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Русский

English
简体中文
繁體中文
Español
Français
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Внешний вид

Sidebar Navigation

Руководство

Зачем Vitest

Начало работы

Функциональность

Рабочая область

Интерфейс командной строки

Фильтрация тестов

Репортёры

Покрытие кода

Снапшоты

Мокирование

Тестирование типов

Vitest UI

Режим браузера

In-source тестирование (Тестирование в исходном коде)

Контекст теста

Тестовая среда

Расширение проверок (matchers)

Интеграции с IDE

Отладка

Сравнения с другими тестовыми фреймворками

Руководство по миграции

Распространенные ошибки

Улучшение производительности

API

Справочник по Test API

Mock-функции

Vitest

expect

expectTypeOf

assert

assertType

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

Настройка конфигурационного файла Vitest

Настройка Vitest

Содержание страницы

Функциональность ​

  • Vite: конфигурация, трансформеры, разрешители и плагины.
  • Используйте те же настройки, что и в вашем приложении, для запуска тестов!
  • Умный режим наблюдения (watch mode), как HMR для тестов!
  • Компонентное тестирование для Vue, React, Svelte, Lit и других
  • Поддержка TypeScript и JSX "из коробки"
  • ESM first, top level await (сначала ESM, await верхнего уровня)
  • Многопоточность через воркеры с помощью Tinypool
  • Поддержка тестирования производительности с помощью Tinybench
  • Фильтрация, таймауты и параллельный запуск для наборов тестов и отдельных тестов
  • Поддержка Workspace (рабочего пространства)
  • Совместимость со Snapshot от Jest
  • Встроенная библиотека Chai для утверждений и API, совместимые с Jest expect
  • Встроенная библиотека Tinyspy для мокирования
  • happy-dom или jsdom для мокирования DOM
  • Покрытие кода через v8 или istanbul
  • Тестирование внутри исходного кода в стиле Rust
  • Тестирование типов через expect-type
Узнайте, как написать свой первый тест с помощью видео

Общая конфигурация для тестов, разработки и сборки ​

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

Узнайте больше в разделе Настройка Vitest.

Режим наблюдения (Watch Mode) ​

bash
$ vitest

При изменении исходного кода или файлов тестов Vitest автоматически анализирует граф модулей и перезапускает только связанные тесты, как HMR в Vite!

vitest запускается в watch mode по умолчанию в среде разработки и в run mode в среде CI (если присутствует process.env.CI). Используйте vitest watch или vitest run, чтобы явно указать желаемый режим.

Поддержка распространенных веб-технологий "из коробки" ​

Встроенная поддержка ES Module / TypeScript / JSX / PostCSS.

Многопоточность ​

По умолчанию Vitest запускает тестовые файлы в несколько потоков, используя node:worker_threads через Tinypool (облегченный форк Piscina), что позволяет запускать тесты одновременно. Если ваш тестовый код не совместим с многопоточностью, вы можете переключиться на --pool=forks, который запускает тесты в нескольких процессах, используя node:child_process через Tinypool.

Чтобы запустить тесты в одном потоке или процессе, см. poolOptions.

Vitest также изолирует среду каждого файла, поэтому изменения переменных окружения в одном файле не влияют на другие. Изоляцию можно отключить, передав --no-isolate в CLI (в ущерб корректности ради производительности).

Фильтрация тестов ​

Vitest предоставляет различные способы сузить круг запускаемых тестов для ускорения тестирования и фокусировки на разработке.

Подробнее о фильтрации тестов.

Параллельный запуск тестов (concurrently) ​

Используйте .concurrent в последовательных тестах для их параллельного запуска.

ts
import { describe, it } from 'vitest';

// Два теста, отмеченные как concurrent, будут запущены параллельно
describe('suite', () => {
  it('serial test', async () => {
    /* ... */
  });
  it.concurrent('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
});

При использовании .concurrent в наборе тестов (suite), каждый тест в нем будет запущен параллельно.

ts
import { describe, it } from 'vitest';

// Все тесты в этом наборе будут запущены параллельно
describe.concurrent('suite', () => {
  it('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 3', async ({ expect }) => {
    /* ... */
  });
});

Вы также можете использовать .skip, .only и .todo с параллельными наборами тестов и тестами. Подробнее в API Reference.

WARNING

При запуске параллельных тестов Snapshots и Assertions должны использовать expect из локального контекста теста для правильной идентификации теста.

Snapshot-тестирование ​

Поддержка snapshot-тестирования, совместимая с Jest.

ts
import { expect, it } from 'vitest';

it('renders correctly', () => {
  const result = render();
  expect(result).toMatchSnapshot();
});

Подробнее в разделе Snapshot.

Совместимость с Chai и Jest expect ​

Chai встроен для утверждений и предоставляет API, совместимые с Jest expect.

Если вы используете сторонние библиотеки, добавляющие сопоставители (matchers), установка test.globals в true обеспечит лучшую совместимость.

Мокирование ​

Tinyspy встроен для мокирования с jest-совместимыми API через объект vi.

ts
import { expect, vi } from 'vitest';

const fn = vi.fn();

fn('hello', 1);

expect(vi.isMockFunction(fn)).toBe(true);
expect(fn.mock.calls[0]).toEqual(['hello', 1]);

fn.mockImplementation(arg => arg);

fn('world', 2);

expect(fn.mock.results[1].value).toBe('world');

Vitest поддерживает happy-dom или jsdom для мокирования DOM и браузерных API. Они не включены в Vitest, и вам может потребоваться их установить:

bash
$ npm i -D happy-dom
# or
$ npm i -D jsdom

Затем измените параметр environment в файле конфигурации:

ts
// vitest.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    environment: 'happy-dom', // or 'jsdom', 'node'
  },
});

Подробнее в разделе Мокирование.

Покрытие кода ​

Vitest поддерживает нативное покрытие кода через v8 и покрытие инструментированного кода через istanbul.

json
{
  "scripts": {
    "test": "vitest",
    "coverage": "vitest run --coverage"
  }
}

Подробнее в разделе Покрытие.

In-source testing (Тестирование в исходном коде) ​

Vitest предоставляет возможность запускать тесты непосредственно в исходном коде, рядом с реализацией, аналогично модульным тестам в Rust.

Это позволяет тестам использовать то же замыкание, что и реализация, и тестировать частные состояния без экспорта. Также это сокращает цикл обратной связи при разработке.

ts
// src/index.ts

// реализация
export function add(...args: number[]) {
  return args.reduce((a, b) => a + b, 0);
}

// тесты в исходном коде
if (import.meta.vitest) {
  const { it, expect } = import.meta.vitest;
  it('add', () => {
    expect(add()).toBe(0);
    expect(add(1)).toBe(1);
    expect(add(1, 2, 3)).toBe(6);
  });
}

Подробнее в разделе In-source testing.

Тестирование производительности экспериментально ​

Начиная с Vitest 0.23.0, для оценки и сравнения производительности можно использовать функцию bench через Tinybench.

ts
import { bench, describe } from 'vitest';

describe('sort', () => {
  bench('normal', () => {
    const x = [1, 5, 4, 2, 3];
    x.sort((a, b) => {
      return a - b;
    });
  });

  bench('reverse', () => {
    const x = [1, 5, 4, 2, 3];
    x.reverse().sort((a, b) => {
      return a - b;
    });
  });
});
Benchmark reportBenchmark report

Проверка типов экспериментально ​

Начиная с Vitest 0.25.0, вы можете писать тесты для выявления регрессий типов. Vitest поставляется с пакетом expect-type, предоставляющим аналогичный и простой для понимания API.

ts
import { assertType, expectTypeOf } from 'vitest';
import { mount } from './mount.js';

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction();
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>();

  // @ts-expect-error name is a string
  assertType(mount({ name: 42 }));
});
Pager
Предыдущая страницаНачало работы
Следующая страницаРабочая область

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/features

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors