Skip to content

In vielen Fällen kann Buns Testrunner Jest-Testsuiten ohne Code-Änderungen ausführen. Führen Sie einfach bun test anstelle von npx jest, yarn test, etc. aus.

sh
npx jest
yarn test
bun test

Es sind oft keine Code-Änderungen erforderlich.

  • Bun schreibt intern Importe von @jest/globals um, um die bun:test-Äquivalente zu verwenden.
  • Wenn Sie sich darauf verlassen, dass Jest test, expect, etc. als Globals injiziert, macht Bun das auch.

Wenn Sie jedoch zu den bun:test-Importen wechseln möchten, können Sie das auch tun.

test.ts
ts
import { test, expect } from "@jest/globals"; 
import { test, expect } from "bun:test"; 

Seit Bun v1.2.19 können Sie TypeScript-Unterstützung für globale Testfunktionen mit einer einzigen Triple-Slash-Direktive aktivieren. Dies macht die Migration von Jest noch einfacher, da Sie die Direktive nur einmal in Ihrem gesamten Projekt hinzufügen müssen:

Fügen Sie diese Direktive zu nur einer Datei in Ihrem Projekt hinzu, wie zum Beispiel:

  • Eine global.d.ts-Datei im Projektstammverzeichnis
  • Ihre Test-preload.ts-Setup-Datei (wenn Sie preload in bunfig.toml verwenden)
  • Eine beliebige .ts-Datei, die TypeScript in Ihre Kompilierung einschließt
global.d.ts
ts
/// <reference types="bun-types/test-globals" />

Sobald dies hinzugefügt wurde, erhalten alle Testdateien in Ihrem Projekt automatisch TypeScript-Unterstützung für Jest-Globals:

ts
describe("my test suite", () => {
  test("should work", () => {
    expect(1 + 1).toBe(2);
  });

  beforeAll(() => {
    // setup code
  });

  afterEach(() => {
    // cleanup code
  });
});

Bun implementiert die überwiegende Mehrheit von Jests Matchern, aber die Kompatibilität ist noch nicht 100%. Sehen Sie die vollständige Kompatibilitätstabelle unter Docs > Test runner > Writing tests.

Einige bemerkenswerte fehlende Features:

  • expect().toHaveReturned()

Wenn Sie testEnvironment: "jsdom" verwenden, um Ihre Tests in einer browserähnlichen Umgebung auszuführen, sollten Sie der Anleitung DOM-Tests mit Bun und happy-dom folgen, um Browser-APIs in den globalen Geltungsbereich zu injizieren. Diese Anleitung verwendet happy-dom, das eine schlankere und schnellere Alternative zu jsdom ist.

Derzeit funktioniert jsdom nicht in Bun aufgrund seiner internen Verwendung von V8-APIs. Verfolgen Sie die Unterstützung dafür hier.

toml
[test]
preload = ["./happy-dom.ts"]

Ersetzen Sie bail in Ihrer Jest-Konfiguration durch das --bail-CLI-Flag.

sh
bun test --bail=3

Ersetzen Sie collectCoverage durch das --coverage-CLI-Flag.

sh
bun test --coverage

Ersetzen Sie testTimeout durch das --test-timeout-CLI-Flag.

sh
bun test --timeout 10000

Viele andere Flags werden irrelevant oder veraltet bei Verwendung von bun test.

  • transform — Bun unterstützt TypeScript & JSX. Andere Dateitypen können mit Plugins konfiguriert werden.
  • extensionsToTreatAsEsm
  • haste — Bun verwendet seine eigenen internen Source Maps
  • watchman, watchPlugins, watchPathIgnorePatterns — verwenden Sie --watch, um Tests im Watch-Modus auszuführen
  • verbose — setzen Sie logLevel: "debug" in bunfig.toml

Einstellungen, die hier nicht erwähnt werden, werden nicht unterstützt oder haben kein Äquivalent. Bitte reichen Sie eine Feature-Anfrage ein, wenn etwas Wichtiges fehlt.


Siehe auch:

Bun von www.bunjs.com.cn bearbeitet