Paralelismo
Paralelismo de Archivos
Por defecto, Vitest ejecuta los archivos de prueba en paralelo. Dependiendo del pool
especificado, Vitest utiliza un mecanismo diferente para paralelizar los archivos de prueba:
forks
(el predeterminado) yvmForks
ejecutan pruebas en diferentes procesos hijos.threads
yvmThreads
ejecutan pruebas en diferentes hilos de ejecución.
Tanto los "procesos hijos" como los "hilos de ejecución" se denominan "workers". Puedes configurar el número de workers en ejecución con las opciones minWorkers
y maxWorkers
, o de manera más detallada con la configuración poolOptions
.
Si tienes muchas pruebas, generalmente es más rápido ejecutarlas en paralelo, aunque el rendimiento también depende del proyecto, el entorno y el estado de aislamiento. Para desactivar la paralelización de los archivos, puedes establecer fileParallelism
en false
. Para obtener más información sobre posibles mejoras de rendimiento, consulta la Guía de Rendimiento.
Paralelismo de Pruebas
A diferencia de los archivos de prueba, Vitest ejecuta las pruebas en secuencia. Esto significa que las pruebas dentro de un único archivo de prueba se ejecutarán en el orden en que se definen.
Vitest admite la opción concurrent
para ejecutar pruebas de forma concurrente. Si esta opción se configura, Vitest agrupará las pruebas concurrentes dentro del mismo archivo (la cantidad de pruebas que se ejecutan simultáneamente depende de la opción maxConcurrency
) y las ejecutará con Promise.all
.
Vitest no realiza ningún análisis inteligente ni crea workers adicionales para ejecutar estas pruebas. Esto significa que el rendimiento de tus pruebas solo mejorará si dependen en gran medida de operaciones asíncronas. Por ejemplo, las siguientes pruebas se seguirán ejecutando una tras otra, aunque se haya especificado la opción concurrent
, ya que son pruebas síncronas:
test.concurrent('the first test', () => {
expect(1).toBe(1);
});
test.concurrent('the second test', () => {
expect(2).toBe(2);
});
Si deseas ejecutar todas las pruebas de forma concurrente, puedes establecer la opción sequence.concurrent
en true
.