Skip to content
Vitest 3
Main Navigation Руководство & APIКонфигурацияРежим браузераРасширенный API
3.2.0
2.1.9
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

API

Справочник по API тестирования

Мок-функции

Vi

expect

expectTypeOf

assert

assertType

Руководство

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

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

Тестовые проекты

Средства отчётности

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

Снапшот-тестирование

Мокирование

Параллелизм

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

Vitest UI

Тестирование в исходном коде

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

Аннотации тестов

Среда тестирования

Расширение матчеров

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

Отладка

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

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

Миграция на Vitest 3.0

Миграция с Jest

Производительность

Профилирование производительности тестов

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

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

Расширенный API

Сравнение с другими тестовыми раннерами

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

Среда тестирования ​

Vitest предоставляет опцию environment для запуска кода в определенной среде. Вы можете настроить поведение среды с помощью опции environmentOptions.

По умолчанию доступны следующие среды:

  • node — среда по умолчанию.
  • jsdom эмулирует среду браузера, предоставляя Browser API, используя пакет jsdom.
  • happy-dom эмулирует среду браузера, предоставляя Browser API. Считается более быстрой, чем jsdom, но может не иметь некоторых API. Использует пакет happy-dom.
  • edge-runtime эмулирует edge-runtime от Vercel, используя пакет @edge-runtime/vm.

INFO

При использовании сред jsdom или happy-dom Vitest следует тем же правилам, что и Vite при импорте CSS и ресурсов. Если импорт внешней зависимости завершается ошибкой unknown extension .css, вам необходимо вручную включить все пакеты в цепочку импорта, добавив их в server.deps.external. Например, если ошибка возникает в package-3 в цепочке импорта: исходный код -> package-1 -> package-2 -> package-3, вам необходимо добавить все три пакета в server.deps.external.

Вызовы require для CSS и ресурсов внутри внешних зависимостей разрешаются автоматически.

WARNING

Среды существуют только при запуске тестов в Node.js.

browser не считается средой в Vitest. Если вы хотите запустить часть своих тестов в режиме браузера, вы можете создать тестовый проект для выполнения этих тестов.

Среды для определенных файлов ​

При установке опции environment в вашей конфигурации она будет применяться ко всем тестовым файлам в вашем проекте. Для более детального контроля вы можете использовать управляющие комментарии для указания среды для определенных файлов. Управляющие комментарии — это комментарии, которые начинаются с @vitest-environment, за которыми следует имя среды:

ts
// @vitest-environment jsdom

import { expect, test } from 'vitest';

test('test', () => {
  expect(typeof window).not.toBe('undefined');
});

Вы также можете установить опцию environmentMatchGlobs, чтобы указать среду на основе шаблонов glob.

Пользовательская среда ​

Вы можете создать свой собственный пакет для расширения функциональности сред Vitest. Для этого создайте пакет, назвав его vitest-environment-${name}, или укажите путь к действительному файлу JS/TS. Этот пакет должен экспортировать объект, соответствующий интерфейсу Environment:

ts
import type { Environment } from 'vitest/environments';

export default <Environment>{
  name: 'custom',
  transformMode: 'ssr',
  // необязательно — только для поддержки пула "experimental-vm"
  async setupVM() {
    const vm = await import('node:vm');
    const context = vm.createContext();
    return {
      getVmContext() {
        return context;
      },
      teardown() {
        // вызывается после завершения всех тестов, использующих эту среду
      },
    };
  },
  setup() {
    // пользовательская настройка
    return {
      teardown() {
        // вызывается после завершения всех тестов, использующих эту среду
      },
    };
  },
};

WARNING

Для объекта среды в Vitest обязательна опция transformMode. Ее значение должно быть ssr или web. Это значение определяет, каким образом плагины будут преобразовывать исходный код. Если оно установлено на ssr, хуки плагинов будут получать ssr: true при преобразовании или разрешении файлов. В противном случае ssr устанавливается на false.

У вас также есть доступ к стандартным средам Vitest через импорт из vitest/environments:

ts
import { builtinEnvironments, populateGlobal } from 'vitest/environments';

console.log(builtinEnvironments); // { jsdom, happy-dom, node, edge-runtime }

Vitest также предоставляет служебную функцию populateGlobal, которую можно использовать для копирования свойств из объекта в глобальное пространство имен:

ts
interface PopulateOptions {
  // следует ли привязывать функции, не являющиеся методами классов, к глобальному пространству имен
  bindFunctions?: boolean;
}

interface PopulateResult {
  // список всех скопированных ключей, даже если соответствующее значение отсутствует в исходном объекте
  keys: Set<string>;
  // отображение исходного объекта, свойства которого могли быть переопределены
  // эти значения можно вернуть внутри функции `teardown`
  originals: Map<string | symbol, any>;
}

export function populateGlobal(
  global: any,
  original: any,
  options: PopulateOptions
): PopulateResult;
Pager
Предыдущая страницаАннотации тестов
Следующая страницаРасширение матчеров

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

Авторские права (c) 2021-Present Vitest Team

https://vitest.dev/guide/environment

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

Авторские права (c) 2021-Present Vitest Team