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