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) undvmForksführen Tests in separaten Child-Prozessen aus.threadsundvmThreadsfü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.