Der Datei-Erkennungsmechanismus von bun test bestimmt, welche Dateien als Tests ausgeführt werden. Das Verständnis seiner Funktionsweise hilft Ihnen, Ihre Testdateien effektiv zu strukturieren.
Standard-Erkennungslogik
Standardmäßig durchsucht bun test rekursiv das Projektverzeichnis nach Dateien, die mit bestimmten Mustern übereinstimmen:
*.test.{js|jsx|ts|tsx}- Dateien, die mit.test.js,.test.jsx,.test.tsoder.test.tsxenden*_test.{js|jsx|ts|tsx}- Dateien, die mit_test.js,_test.jsx,_test.tsoder_test.tsxenden*.spec.{js|jsx|ts|tsx}- Dateien, die mit.spec.js,.spec.jsx,.spec.tsoder.spec.tsxenden*_spec.{js|jsx|ts|tsx}- Dateien, die mit_spec.js,_spec.jsx,_spec.tsoder_spec.tsxenden
Ausschlüsse
Standardmäßig ignoriert Bun-Test:
node_modules-Verzeichnisse- Versteckte Verzeichnisse (die mit einem Punkt
.beginnen) - Dateien, die keine JavaScript-ähnlichen Erweiterungen haben (basierend auf verfügbaren Loadern)
Test-Erkennung anpassen
Positionsargumente als Filter
Sie können filtern, welche Testdateien ausgeführt werden, indem Sie zusätzliche Positionsargumente an bun test übergeben:
bun test <filter> <filter> ...Jede Testdatei mit einem Pfad, der einen der Filter enthält, wird ausgeführt. Diese Filter sind einfache Teilzeichenfolgen-Übereinstimmungen, keine Glob-Muster.
Um beispielsweise alle Tests in einem utils-Verzeichnis auszuführen:
bun test utilsDies würde Dateien wie src/utils/string.test.ts und lib/utils/array_test.js übereinstimmen.
Exakte Dateipfade angeben
Um eine bestimmte Datei im Test-Runner auszuführen, stellen Sie sicher, dass der Pfad mit ./ oder / beginnt, um ihn von einem Filternamen zu unterscheiden:
bun test ./test/specific-file.test.tsNach Testnamen filtern
Um Tests nach Name statt nach Dateipfad zu filtern, verwenden Sie das -t/--test-name-pattern-Flag mit einem Regex-Muster:
# Alle Tests mit "addition" im Namen ausführen
bun test --test-name-pattern additionDas Muster wird mit einer verketteten Zeichenfolge aus dem Testnamen abgeglichen, der mit den Labels aller übergeordneten describe-Blöcke, getrennt durch Leerzeichen, vorangestellt ist. Ein Test, der wie folgt definiert ist:
describe("Mathematik", () => {
describe("Operationen", () => {
test("sollte korrekt addieren", () => {
// ...
});
});
});Würde mit der Zeichenfolge "Mathematik Operationen sollte korrekt addieren" abgeglichen werden.
Root-Verzeichnis ändern
Standardmäßig sucht Bun nach Testdateien ausgehend vom aktuellen Arbeitsverzeichnis. Sie können dies mit der root-Option in Ihrer bunfig.toml ändern:
[test]
root = "src" # Nur im src-Verzeichnis nach Tests scannenAusführungsreihenfolge
Tests werden in der folgenden Reihenfolge ausgeführt:
- Testdateien werden sequentiell (nicht parallel) ausgeführt
- Innerhalb jeder Datei werden Tests sequentiell basierend auf ihrer Definitionsreihenfolge ausgeführt
Fortgeschrittene Erkennung
Mehrere Filter kombinieren
Sie können mehrere Filter kombinieren, um Tests aus verschiedenen Verzeichnissen auszuführen:
# Tests aus utils- und components-Verzeichnissen ausführen
bun test utils components
# Tests aus mehreren Pfaden ausführen
bun test src/utils src/componentsNegative Filter
Verwenden Sie --test-pattern, um Tests einzuschließen, und kombinieren Sie mit Positionsargumenten, um bestimmte Tests auszuschließen:
# Alle Tests außer Integrationstests ausführen
bun test --test-pattern="^(?!.*integration).*\.test\.ts$"Umgebungsbedingte Erkennung
Sie können die Test-Erkennung basierend auf Umgebungsvariablen steuern:
# Nur Unit-Tests in CI ausführen
CI=true bun test unit
# Alle Tests lokal ausführen
bun testBest Practices
Testdateien benennen
Verwenden Sie konsistente Benennungskonventionen für Ihre Testdateien:
src/
components/
Button.test.tsx
Button.spec.tsx # Vermeiden Sie beide Stile im selben Projekt
utils/
helpers.test.ts
helpers.spec.ts # Wählen Sie einen Stil und bleiben Sie dabeiTestverzeichnisstruktur
Organisieren Sie Tests entweder neben dem Quellcode oder in einem separaten Verzeichnis:
# Option 1: Tests neben Quellcode
src/
components/
Button.tsx
Button.test.tsx
utils/
helpers.ts
helpers.test.ts
# Option 2: Separates Test-Verzeichnis
src/
components/
Button.tsx
utils/
helpers.ts
tests/
components/
Button.test.tsx
utils/
helpers.test.tsGroße Testsuiten verwalten
Für große Projekte können Sie die Test-Erkennung optimieren:
[test]
# Nur in bestimmten Verzeichnissen nach Tests suchen
root = "src"
# Bestimmte Muster ausschließen
# (dies würde über CLI-Filter oder benutzerdefinierte Skripte erfolgen)# Tests nach Typ ausführen
bun test unit # Nur Unit-Tests
bun test e2e # Nur End-to-End-Tests
bun test integration # Nur Integrationstests