Skip to content

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.ts oder .test.tsx enden
  • *_test.{js|jsx|ts|tsx} - Dateien, die mit _test.js, _test.jsx, _test.ts oder _test.tsx enden
  • *.spec.{js|jsx|ts|tsx} - Dateien, die mit .spec.js, .spec.jsx, .spec.ts oder .spec.tsx enden
  • *_spec.{js|jsx|ts|tsx} - Dateien, die mit _spec.js, _spec.jsx, _spec.ts oder _spec.tsx enden

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:

bash
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:

bash
bun test utils

Dies 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:

bash
bun test ./test/specific-file.test.ts

Nach Testnamen filtern

Um Tests nach Name statt nach Dateipfad zu filtern, verwenden Sie das -t/--test-name-pattern-Flag mit einem Regex-Muster:

sh
# Alle Tests mit "addition" im Namen ausführen
bun test --test-name-pattern addition

Das 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:

math.test.ts
ts
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:

bunfig.toml
toml
[test]
root = "src"  # Nur im src-Verzeichnis nach Tests scannen

Ausführungsreihenfolge

Tests werden in der folgenden Reihenfolge ausgeführt:

  1. Testdateien werden sequentiell (nicht parallel) ausgeführt
  2. 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:

bash
# Tests aus utils- und components-Verzeichnissen ausführen
bun test utils components

# Tests aus mehreren Pfaden ausführen
bun test src/utils src/components

Negative Filter

Verwenden Sie --test-pattern, um Tests einzuschließen, und kombinieren Sie mit Positionsargumenten, um bestimmte Tests auszuschließen:

bash
# 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:

bash
# Nur Unit-Tests in CI ausführen
CI=true bun test unit

# Alle Tests lokal ausführen
bun test

Best 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 dabei

Testverzeichnisstruktur

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.ts

Große Testsuiten verwalten

Für große Projekte können Sie die Test-Erkennung optimieren:

bunfig.toml
toml
[test]
# Nur in bestimmten Verzeichnissen nach Tests suchen
root = "src"

# Bestimmte Muster ausschließen
# (dies würde über CLI-Filter oder benutzerdefinierte Skripte erfolgen)
bash
# Tests nach Typ ausführen
bun test unit      # Nur Unit-Tests
bun test e2e       # Nur End-to-End-Tests
bun test integration  # Nur Integrationstests

Bun von www.bunjs.com.cn bearbeitet