Paralelní zpracování
Paralelní zpracování souborů
Vitest ve výchozím nastavení spouští testovací soubory paralelně. V závislosti na zvoleném pool
používá Vitest pro paralelní zpracování testovacích souborů různé mechanismy:
forks
(výchozí) avmForks
spouštějí testy v různých dětských procesech.threads
avmThreads
spouštějí testy v různých pracovních vláknech.
Jak "dětské procesy", tak "pracovní vlákna" jsou označovány jako "pracovní jednotky" (workers). Počet běžících pracovních jednotek můžete konfigurovat pomocí možností minWorkers
a maxWorkers
. Detailnější konfiguraci pak naleznete v poolOptions
.
Pokud máte mnoho testů, je obvykle rychlejší je spouštět paralelně, ale záleží to také na projektu, prostředí a stavu izolace. Chcete-li zakázat paralelizaci souborů, můžete nastavit fileParallelism
na false
. Chcete-li se dozvědět více o možných zlepšeních výkonu, přečtěte si Průvodce výkonem.
Paralelismus testů
Na rozdíl od testovacích souborů spouští Vitest testy sekvenčně. To znamená, že testy uvnitř jednoho testovacího souboru se spustí v pořadí, v jakém jsou definovány.
Vitest podporuje možnost concurrent
pro souběžné spouštění testů. Pokud je tato možnost nastavena, Vitest seskupí souběžné testy ve stejném souboru (počet současně spuštěných testů závisí na možnosti maxConcurrency
) a spustí je pomocí Promise.all
.
Vitest neprovádí žádnou inteligentní analýzu a nevytváří další pracovní jednotky pro spouštění těchto testů. To znamená, že výkon vašich testů se zlepší pouze v případě, že se silně spoléháte na asynchronní operace. Například tyto testy se budou stále spouštět jeden po druhém, i když je zadána možnost concurrent
. Je to proto, že jsou synchronní:
test.concurrent('the first test', () => {
expect(1).toBe(1);
});
test.concurrent('the second test', () => {
expect(2).toBe(2);
});
Pokud chcete spouštět všechny testy souběžně, můžete nastavit možnost sequence.concurrent
na true
.