Parallelisierung
Dateiparallelisierung
Standardmäßig führt Vitest Testdateien parallel aus. Je nach konfiguriertem pool
verwendet Vitest einen anderen Mechanismus zur Parallelisierung von Testdateien:
forks
(der Standard) undvmForks
führen Tests in separaten Child-Prozessen aus.threads
undvmThreads
führen Tests in separaten Worker-Threads aus.
Sowohl "Child-Prozesse" als auch "Worker-Threads" werden allgemein als "Worker" bezeichnet. Sie können die Anzahl der gleichzeitig laufenden Worker mit den Optionen minWorkers
und maxWorkers
konfigurieren. Eine granularere Steuerung ist über die Konfiguration poolOptions
möglich.
Bei einer großen Anzahl von Tests ist die parallele Ausführung in der Regel schneller, dies hängt jedoch auch vom Projekt, der Umgebung und dem Isolationszustand ab. Um die Dateiparallelisierung zu deaktivieren, können Sie fileParallelism
auf false
setzen. Weitere Informationen zu möglichen Leistungsverbesserungen finden Sie im Performance Guide.
Testparallelisierung
Im Gegensatz zur Parallelisierung von Testdateien führt Vitest Tests innerhalb einer einzelnen Testdatei sequenziell aus. Das bedeutet, dass Tests in der Reihenfolge ausgeführt werden, in der sie definiert sind.
Vitest unterstützt die Option concurrent
, um Tests innerhalb einer Datei gleichzeitig auszuführen. Wenn diese Option gesetzt ist, gruppiert Vitest konkurrierende Tests in derselben Datei (die Anzahl der gleichzeitig laufenden Tests hängt von der Option maxConcurrency
ab) und führt sie mit Promise.all
aus.
Vitest führt keine intelligente Analyse durch und erstellt keine zusätzlichen Worker, um diese Tests auszuführen. Das bedeutet, dass sich die Leistung Ihrer Tests nur dann verbessert, wenn sie stark von asynchronen Operationen abhängen. Zum Beispiel werden die folgenden Tests immer noch nacheinander ausgeführt, obwohl die Option concurrent
angegeben ist, da sie synchron sind:
test.concurrent('the first test', () => {
expect(1).toBe(1);
});
test.concurrent('the second test', () => {
expect(2).toBe(2);
});
Wenn Sie alle Tests innerhalb einer Datei standardmäßig gleichzeitig ausführen möchten, können Sie die Option sequence.concurrent
auf true
setzen.