Konfigurieren Sie bun test über die bunfig.toml-Datei und Befehlszeilenoptionen. Diese Seite dokumentiert die verfügbaren Konfigurationsoptionen für bun test.
Konfigurationsdatei
Sie können das Verhalten von bun test konfigurieren, indem Sie einen [test]-Abschnitt zu Ihrer bunfig.toml-Datei hinzufügen:
[test]
# Optionen kommen hierTest-Erkennung
root
Die root-Option gibt ein Root-Verzeichnis für die Test-Erkennung an und überschreibt das Standardverhalten des Scannens vom Projekt-Root.
[test]
root = "src" # Nur im src-Verzeichnis nach Tests scannenDies ist nützlich, wenn Sie:
- Die Test-Erkennung auf bestimmte Verzeichnisse beschränken möchten
- Bestimmte Teile Ihres Projekts vom Test-Scanning ausschließen möchten
- Tests in einer bestimmten Unterverzeichnisstruktur organisieren möchten
Beispiele
[test]
# Nur Tests im src-Verzeichnis ausführen
root = "src"
# Tests in einem bestimmten Test-Verzeichnis ausführen
root = "tests"
# Tests in mehreren bestimmten Verzeichnissen ausführen (derzeit nicht unterstützt - verwenden Sie stattdessen Muster)
# root = ["src", "lib"] # Diese Syntax wird nicht unterstütztPreload-Skripte
Laden Sie Skripte vor dem Ausführen von Tests mit der preload-Option:
[test]
preload = ["./test-setup.ts", "./global-mocks.ts"]Dies entspricht der Verwendung von --preload in der Befehlszeile:
bun test --preload ./test-setup.ts --preload ./global-mocks.tsHäufige Preload-Anwendungsfälle
// Globales Test-Setup
import { beforeAll, afterAll } from "bun:test";
beforeAll(() => {
// Test-Datenbank einrichten
setupTestDatabase();
});
afterAll(() => {
// Aufräumen
cleanupTestDatabase();
});// Globale Mocks
import { mock } from "bun:test";
// Umgebungsvariablen mocken
process.env.NODE_ENV = "test";
process.env.API_URL = "http://localhost:3001";
// Externe Abhängigkeiten mocken
mock.module("./external-api", () => ({
fetchData: mock(() => Promise.resolve({ data: "test" })),
}));Timeouts
Standard-Timeout
Legen Sie das Standard-Timeout für alle Tests fest:
[test]
timeout = 10000 # 10 Sekunden (Standard ist 5000ms)Dies gilt für alle Tests, es sei denn, es wird durch einzelne Test-Timeouts überschrieben:
// Dieser Test verwendet das Standard-Timeout aus bunfig.toml
test("verwendet Standard-Timeout", () => {
// Test-Implementierung
});
// Dieser Test überschreibt das Standard-Timeout
test("benutzerdefiniertes Timeout", () => {
// Test-Implementierung
}, 30000); // 30 SekundenReporter
JUnit-Reporter
Konfigurieren Sie den JUnit-Reporter-Ausgabedateipfad direkt in der Konfigurationsdatei:
[test.reporter]
junit = "path/to/junit.xml" # Ausgabepfad für JUnit-XML-BerichtDies ergänzt die --reporter=junit- und --reporter-outfile-CLI-Flags:
# Entsprechende Befehlszeilenverwendung
bun test --reporter=junit --reporter-outfile=./junit.xmlMehrere Reporter
Sie können mehrere Reporter gleichzeitig verwenden:
# CLI-Ansatz
bun test --reporter=junit --reporter-outfile=./junit.xml
# Konfigurationsdatei-Ansatz[test.reporter]
junit = "./reports/junit.xml"
[test]
# Coverage-Berichterstattung auch aktivieren
coverage = true
coverageReporter = ["text", "lcov"]Speichernutzung
smol-Modus
Aktivieren Sie den --smol-Speicher-sparmodus speziell für den Test-Runner:
[test]
smol = true # Speichernutzung während Testläufen reduzierenDies entspricht der Verwendung des --smol-Flags in der Befehlszeile:
bun test --smolDer smol-Modus reduziert die Speichernutzung durch:
- Weniger Speicher für den JavaScript-Heap verwenden
- Aggressiver bei der Garbage Collection sein
- Puffergrößen reduzieren, wo möglich
Dies ist nützlich für:
- CI-Umgebungen mit begrenztem Speicher
- Große Testsuiten, die erheblichen Speicher verbrauchen
- Entwicklungsumgebungen mit Speicherbeschränkungen
Test-Ausführung
concurrentTestGlob
Führt Testdateien, die mit einem Glob-Muster übereinstimmen, automatisch mit aktivierter gleichzeitiger Test-Ausführung aus. Dies ist nützlich für die schrittweise Migration von Testsuiten zur gleichzeitigen Ausführung oder zum gleichzeitigen Ausführen bestimmter Testtypen.
[test]
concurrentTestGlob = "**/concurrent-*.test.ts" # Dateien, die mit diesem Muster übereinstimmen, gleichzeitig ausführenTestdateien, die mit diesem Muster übereinstimmen, verhalten sich so, als ob das --concurrent-Flag übergeben wurde, wobei alle Tests innerhalb dieser Dateien gleichzeitig ausgeführt werden. Dies ermöglicht es Ihnen:
- Ihre Testsuite schrittweise zur gleichzeitigen Ausführung zu migrieren
- Integrationstests gleichzeitig auszuführen, während Unit-Tests sequentiell bleiben
- Schnelle gleichzeitige Tests von Tests zu trennen, die sequentielle Ausführung erfordern
Das --concurrent-CLI-Flag überschreibt diese Einstellung bei Angabe und zwingt alle Tests zur gleichzeitigen Ausführung, unabhängig vom Glob-Muster.
randomize
Tests in zufälliger Reihenfolge ausführen, um Tests mit versteckten Abhängigkeiten zu identifizieren:
[test]
randomize = trueseed
Einen Seed für reproduzierbare zufällige Test-Reihenfolge angeben. Erfordert randomize = true:
[test]
randomize = true
seed = 2444615283rerunEach
Jede Testdatei mehrmals ausführen, um flüchtige Tests zu identifizieren:
[test]
rerunEach = 3Coverage-Optionen
Grundlegende Coverage-Einstellungen
[test]
# Coverage standardmäßig aktivieren
coverage = true
# Coverage-Reporter festlegen
coverageReporter = ["text", "lcov"]
# Coverage-Ausgabeverzeichnis festlegen
coverageDir = "./coverage"Testdateien von Coverage ausschließen
Schließt Dateien, die mit Testmustern übereinstimmen (z. B. *.test.ts), vom Coverage-Bericht aus:
[test]
coverageSkipTestFiles = true # Testdateien von Coverage-Berichten ausschließenCoverage-Schwellenwerte
Der Coverage-Schwellenwert kann entweder als Zahl oder als Objekt mit spezifischen Schwellenwerten angegeben werden:
[test]
# Einfacher Schwellenwert - gilt für Zeilen, Funktionen und Anweisungen
coverageThreshold = 0.8
# Detaillierte Schwellenwerte
coverageThreshold = { lines = 0.9, functions = 0.8, statements = 0.85 }Das Festlegen eines dieser Schwellenwerte aktiviert fail_on_low_coverage, wodurch der Testlauf fehlschlägt, wenn die Coverage unter dem Schwellenwert liegt.
Schwellenwert-Beispiele
[test]
# 90% Coverage insgesamt erfordern
coverageThreshold = 0.9
# Unterschiedliche Anforderungen für verschiedene Metriken
coverageThreshold = {
lines = 0.85, # 85% Zeilen-Coverage
functions = 0.90, # 90% Funktions-Coverage
statements = 0.80 # 80% Anweisungs-Coverage
}Coverage-Pfad-Ignoriermuster
Schließen Sie bestimmte Dateien oder Dateimuster von Coverage-Berichten unter Verwendung von Glob-Mustern aus:
[test]
# Einzelnes Muster
coveragePathIgnorePatterns = "**/*.spec.ts"
# Mehrere Muster
coveragePathIgnorePatterns = [
"**/*.spec.ts",
"**/*.test.ts",
"src/utils/**",
"*.config.js",
"generated/**",
"vendor/**"
]Dateien, die mit einem dieser Muster übereinstimmen, werden von der Coverage-Berechnung und -Berichterstattung ausgeschlossen. Weitere Informationen und Beispiele finden Sie in der Coverage-Dokumentation.
Häufige Ignoriermuster
[test]
coveragePathIgnorePatterns = [
# Testdateien
"**/*.test.ts",
"**/*.spec.ts",
"**/*.e2e.ts",
# Konfigurationsdateien
"*.config.js",
"*.config.ts",
"webpack.config.*",
"vite.config.*",
# Build-Ausgabe
"dist/**",
"build/**",
".next/**",
# Generierter Code
"generated/**",
"**/*.generated.ts",
# Vendor/Third-Party
"vendor/**",
"third-party/**",
# Utilities, die nicht getestet werden müssen
"src/utils/constants.ts",
"src/types/**"
]Sourcemap-Handling
Intern transpiliert Bun jede Datei. Das bedeutet, dass Code-Coverage auch durch Sourcemaps gehen muss, bevor sie berichtet werden kann. Wir stellen dies als Flag zur Verfügung, um Ihnen zu ermöglichen, sich von diesem Verhalten abzumelden, aber es wird verwirrend sein, da Bun während des Transpilierungsprozesses Code verschieben und Variablennamen ändern kann. Diese Option ist hauptsächlich zum Debuggen von Coverage-Problemen nützlich.
[test]
coverageIgnoreSourcemaps = true # Sourcemaps nicht für Coverage-Analyse verwendenInstall-Einstellungen-Vererbung
Der bun test-Befehl erbt relevante Netzwerk- und Installationskonfiguration (Registry, cafile, prefer, exact usw.) vom [install]-Abschnitt von bunfig.toml. Dies ist wichtig, wenn Tests mit privaten Registries interagieren müssen oder spezifische Installationsverhalten erfordern, die während des Testlaufs ausgelöst werden.
[install]
# Diese Einstellungen werden von bun test geerbt
registry = "https://npm.company.com/"
exact = true
prefer = "offline"
[test]
# Testspezifische Konfiguration
coverage = true
timeout = 10000Umgebungsvariablen
Sie können auch Umgebungsvariablen in Ihrer Konfiguration festlegen, die das Testverhalten beeinflussen:
[env]
NODE_ENV = "test"
DATABASE_URL = "postgresql://localhost:5432/test_db"
LOG_LEVEL = "error"
[test]
coverage = trueVollständiges Konfigurationsbeispiel
Hier ist ein umfassendes Beispiel, das alle verfügbaren Test-Konfigurationsoptionen zeigt:
[install]
# Install-Einstellungen, die von Tests geerbt werden
registry = "https://registry.npmjs.org/"
exact = true
[env]
# Umgebungsvariablen für Tests
NODE_ENV = "test"
DATABASE_URL = "postgresql://localhost:5432/test_db"
API_URL = "http://localhost:3001"
LOG_LEVEL = "error"
[test]
# Test-Erkennung
root = "src"
preload = ["./test-setup.ts", "./global-mocks.ts"]
# Ausführungseinstellungen
timeout = 10000
smol = true
# Coverage-Konfiguration
coverage = true
coverageReporter = ["text", "lcov"]
coverageDir = "./coverage"
coverageThreshold = { lines = 0.85, functions = 0.90, statements = 0.80 }
coverageSkipTestFiles = true
coveragePathIgnorePatterns = [
"**/*.spec.ts",
"src/utils/**",
"*.config.js",
"generated/**"
]
# Erweiterte Coverage-Einstellungen
coverageIgnoreSourcemaps = false
# Reporter-Konfiguration
[test.reporter]
junit = "./reports/junit.xml"CLI-Überschreibungsverhalten
Befehlszeilenoptionen überschreiben immer Konfigurationsdateieinstellungen:
[test]
timeout = 5000
coverage = false# Diese CLI-Flags überschreiben die Konfigurationsdatei
bun test --timeout 10000 --coverage
# timeout wird 10000ms sein und coverage wird aktiviert seinBedingte Konfiguration
Sie können verschiedene Konfigurationen für verschiedene Umgebungen verwenden:
[test]
# Standard-Testkonfiguration
coverage = false
timeout = 5000
# Überschreibung für CI-Umgebung
[test.ci]
coverage = true
coverageThreshold = 0.8
timeout = 30000Dann in CI:
# CI-spezifische Einstellungen verwenden
bun test --config=ciValidierung und Fehlerbehebung
Ungültige Konfiguration
Bun warnt vor ungültigen Konfigurationsoptionen:
[test]
invalidOption = true # Dies erzeugt eine WarnungHäufige Konfigurationsprobleme
- Pfadauflösung: Relative Pfade in der Konfiguration werden relativ zum Speicherort der Konfigurationsdatei aufgelöst
- Musterabgleich: Glob-Muster verwenden Standard-Glob-Syntax
- Typenfehler: Stellen Sie sicher, dass numerische Werte nicht in Anführungszeichen gesetzt sind, es sei denn, sie sollten Strings sein
[test]
# Korrekt
timeout = 10000
# Falsch - wird als String behandelt
timeout = "10000"Konfiguration debuggen
Um zu sehen, welche Konfiguration verwendet wird:
# Effektive Konfiguration anzeigen
bun test --dry-run
# Ausführliche Ausgabe zum Anzeigen des Konfigurationsladens
bun test --verbose