Równoległość
Równoległe uruchamianie plików
Domyślnie Vitest uruchamia pliki testowe równolegle. W zależności od wybranej opcji pool
, Vitest wykorzystuje różne mechanizmy do równoległego uruchamiania plików testowych:
forks
(domyślnie) ivmForks
uruchamiają testy w oddzielnych procesach potomnych.threads
ivmThreads
uruchamiają testy w oddzielnych wątkach roboczych.
Zarówno "procesy potomne", jak i "wątki robocze" są określane jako "workery". Możesz skonfigurować liczbę uruchamianych workerów za pomocą opcji minWorkers
i maxWorkers
, lub bardziej precyzyjnie, poprzez konfigurację poolOptions
.
W przypadku dużej liczby testów, ich równoległe uruchamianie zazwyczaj przyspiesza proces, choć zależy to również od specyfiki projektu, środowiska oraz stanu izolacji. Aby wyłączyć równoległe uruchamianie plików, możesz ustawić opcję fileParallelism
na false
. Aby dowiedzieć się więcej o możliwych usprawnieniach wydajności, zapoznaj się z Przewodnikiem po wydajności.
Równoległe uruchamianie testów
W przeciwieństwie do plików testowych, Vitest uruchamia testy wewnątrz pojedynczego pliku sekwencyjnie. Oznacza to, że testy w jednym pliku testowym będą wykonywane w kolejności, w jakiej zostały zdefiniowane.
Vitest wspiera opcję concurrent
, która umożliwia równoległe uruchamianie testów. Jeśli ta opcja jest ustawiona, Vitest grupuje testy oznaczone jako współbieżne w tym samym pliku (liczba jednocześnie uruchomionych testów zależy od opcji maxConcurrency
) i uruchamia je za pomocą Promise.all
.
Vitest nie wykonuje żadnej zaawansowanej analizy ani nie tworzy dodatkowych workerów do uruchamiania tych testów. Oznacza to, że wydajność twoich testów poprawi się tylko wtedy, gdy w dużym stopniu opierają się one na operacjach asynchronicznych. Na przykład, poniższe testy nadal będą uruchamiane jeden po drugim, mimo że określono opcję concurrent
. Wynika to z ich synchronicznego charakteru:
test.concurrent('the first test', () => {
expect(1).toBe(1);
});
test.concurrent('the second test', () => {
expect(2).toBe(2);
});
Jeśli chcesz uruchomić wszystkie testy równolegle, możesz ustawić opcję sequence.concurrent
na true
.