Paralelismo
Paralelismo de Arquivos
Por padrão, o Vitest executa arquivos de teste em paralelo. Dependendo da opção pool
especificada, o Vitest utiliza um mecanismo diferente para paralelizar a execução dos arquivos de teste:
forks
(o padrão) evmForks
executam testes em diferentes processos filho.threads
evmThreads
executam testes em diferentes threads de trabalho.
Tanto "processos filho" quanto "threads de trabalho" são referidos como "workers". Você pode configurar o número de workers em execução com as opções minWorkers
e maxWorkers
, ou de forma mais granular com a configuração poolOptions
.
Ter muitos testes geralmente resulta em uma execução mais rápida quando eles são executados em paralelo. No entanto, isso também depende do projeto, do ambiente e do nível de isolamento. Para desabilitar o paralelismo de arquivos, você pode definir fileParallelism
como false
. Para mais informações sobre possíveis melhorias de desempenho, consulte o Guia de Desempenho.
Paralelismo de Testes
Ao contrário dos arquivos de teste, o Vitest executa os testes em sequência. Isso significa que os testes dentro de um único arquivo de teste serão executados na ordem em que foram definidos.
O Vitest suporta a opção concurrent
para executar testes simultaneamente. Se esta opção for definida, o Vitest agrupará testes simultâneos no mesmo arquivo e os executará utilizando Promise.all
. A quantidade de testes executados simultaneamente depende da opção maxConcurrency
.
O Vitest não realiza nenhuma análise inteligente nem cria workers adicionais para executar esses testes. Isso significa que o desempenho dos seus testes só melhorará se eles dependerem muito de operações assíncronas. Por exemplo, os testes a seguir ainda serão executados um após o outro, mesmo que a opção concurrent
seja especificada, pois são síncronos:
test.concurrent('the first test', () => {
expect(1).toBe(1);
});
test.concurrent('the second test', () => {
expect(2).toBe(2);
});
Se você deseja executar todos os testes em paralelo, pode definir a opção sequence.concurrent
como true
.