INTEGRITY Документация

Изоляция и параллелизм

Узнайте, как интеграция Workers с Vitest запускает ваши тесты, изолирует их друг от друга и импортирует модули.

Запустить тесты

Когда вы запускаете тесты с интеграцией Workers Vitest, Vitest выполнит следующее:

  1. Считывает и выполняет ваш файл конфигурации с помощью Node.js.
  2. Выполните любую globalSetup файлы с помощью Node.js.
  3. Сбор и упорядочивание тестовых файлов.
  4. Для каждого проекта Vitest, в зависимости от настроенной изоляции и параллелизма, запускается один или несколько workerd процессов, каждый из которых выполняет один или несколько Workers.
  5. Запустите setupFiles и тестовые файлы в workerd с помощью соответствующих Workers.
  6. Отслеживайте изменения и повторно запускайте тестовые файлы, используя те же Workers, если конфигурация не изменилась.

Модель изоляции

Изоляция хранилища выполняется на уровне тестового файла. Каждый тестовый файл получает собственную среду хранения, и любые записи в хранилище в рамках одного тестового файла не видны другим тестовым файлам. Интеграция Workers с Vitest по возможности повторно использует Workers и их кеши модулей между запусками тестов. Копия всех вспомогательных workers существует в каждом workerd процесс.

По умолчанию тестовые файлы выполняются параллельно. Чтобы тестовые файлы использовали общее хранилище (например, для интеграционных тестов, зависящих от общего состояния), используйте флаги Vitest --max-workers=1 --no-isolate.

Модули

У каждого Worker есть собственный кэш модулей. Поскольку Workers используются повторно между тестовыми запусками, их кэши модулей также используются повторно. Vitest сбрасывает часть кэша модулей в начале каждого тестового запуска на основе изменённых файлов.

Плагин Workers Vitest выполняет код внутри Cloudflare Worker, который Vitest обычно запускал бы внутри Node.js Worker thread. Чтобы это стало возможным, плагин автоматически внедряет nodejs_compat, [no_nodejs_compat_v2] и export_commonjs_default флаги совместимости. Это минимальная настройка совместимости, при которой Vitest всё ещё работает корректно, но без лишних полифилов и глобальных объектов. Если в конфигурации уже указан флаг совместимости с Node.js, плагин Vitest не добавляет эти флаги повторно.