Параллелизм
Параллельное выполнение файлов
По умолчанию Vitest запускает тестовые файлы параллельно. В зависимости от указанного pool
, Vitest использует различные механизмы для параллельного выполнения тестовых файлов:
forks
(по умолчанию) иvmForks
запускают тесты в отдельных дочерних процессах.threads
иvmThreads
запускают тесты в отдельных рабочих потоках.
Как "дочерние процессы", так и "рабочие потоки" называются воркерами. Вы можете настроить количество запущенных воркеров с помощью опций minWorkers
и maxWorkers
. Более тонкая настройка доступна через конфигурацию poolOptions
.
При наличии большого количества тестов их параллельный запуск обычно ускоряет выполнение, но это также зависит от проекта, окружения и состояния изоляции. Чтобы отключить параллелизацию файлов, вы можете установить для fileParallelism
значение false
. Для получения дополнительной информации о возможных улучшениях производительности ознакомьтесь с Руководством по оптимизации производительности.
Параллелизм тестов
В отличие от тестовых файлов, Vitest запускает тесты последовательно. Это означает, что тесты в одном файле будут выполняться в порядке их определения.
Vitest поддерживает опцию concurrent
для параллельного запуска тестов. Если эта опция установлена, Vitest объединяет параллельные тесты в одном тестовом файле (количество одновременно выполняемых тестов зависит от опции maxConcurrency
) и запускает их с помощью Promise.all
.
Vitest не выполняет интеллектуального анализа и не создает дополнительных воркеров для запуска этих тестов. Это означает, что производительность ваших тестов улучшится только в том случае, если вы активно используете асинхронные операции. Например, следующие тесты все равно будут запускаться один за другим, даже если указана опция concurrent
, из-за их синхронной природы:
test.concurrent('the first test', () => {
expect(1).toBe(1);
});
test.concurrent('the second test', () => {
expect(2).toBe(2);
});
Если вы хотите запустить все тесты параллельно, вы можете установить опцию sequence.concurrent
в true
.