Skip to content

Во многих случаях тестовый раннер Bun может запускать наборы тестов Jest без изменений кода. Просто запустите bun test вместо npx jest, yarn test и т.д.

sh
npx jest
yarn test
bun test

Изменения кода часто не требуются.

  • Bun внутренне переписывает импорты из @jest/globals для использования эквивалентов bun:test.
  • Если вы полагаетесь на Jest для внедрения test, expect и т.д. как глобалов, Bun тоже это делает.

Но если вы предпочитаете переключиться на импорты bun:test, вы можете сделать и это.

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

Начиная с Bun v1.2.19, вы можете включить поддержку TypeScript для глобальных тестовых функций одной директивой triple-slash. Это делает миграцию с Jest ещё проще, поскольку вам нужно добавить директиву только один раз во всём проекте:

Добавьте эту директиву только в один файл в вашем проекте, например:

  • Файл global.d.ts в корне вашего проекта
  • Ваш тестовый файл настройки preload.ts (если используете preload в bunfig.toml)
  • Любой одиночный .ts файл, который TypeScript включает в вашу компиляцию
ts
/// <reference types="bun-types/test-globals" />

После добавления все тестовые файлы в вашем проекте автоматически получат поддержку TypeScript для глобалов Jest:

ts
describe("моя тестовая группа", () => {
  test("должно работать", () => {
    expect(1 + 1).toBe(2);
  });

  beforeAll(() => {
    // код настройки
  });

  afterEach(() => {
    // код очистки
  });
});

Bun реализует подавляющее большинство матчеров Jest, но совместимость ещё не 100%. Обратитесь к полной таблице совместимости в Документация > Тестирование > Написание тестов.

Некоторые примечательные отсутствующие функции:

  • expect().toHaveReturned()

Если вы используете testEnvironment: "jsdom" для запуска тестов в среде, подобной браузеру, вам следует следовать руководству Тестирование DOM с Bun и happy-dom для внедрения браузерных API в глобальную область видимости. Это руководство полагается на happy-dom, который является более лёгкой и быстрой альтернативой jsdom.

В настоящее время jsdom не работает в Bun из-за его внутреннего использования API V8. Отслеживайте поддержку здесь.

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

Замените bail в вашей конфигурации Jest на флаг CLI --bail.

sh
bun test --bail=3

Замените collectCoverage на флаг CLI --coverage.

sh
bun test --coverage

Замените testTimeout на флаг CLI --test-timeout.

sh
bun test --timeout 10000

Многие другие флаги становятся неактуальными или устаревшими при использовании bun test.

  • transform — Bun поддерживает TypeScript и JSX. Другие типы файлов можно настроить с помощью Плагинов.
  • extensionsToTreatAsEsm
  • haste — Bun использует свои собственные внутренние карты источников
  • watchman, watchPlugins, watchPathIgnorePatterns — используйте --watch для запуска тестов в режиме наблюдения
  • verbose — установите logLevel: "debug" в bunfig.toml

Настройки, которые здесь не упомянуты, не поддерживаются или не имеют эквивалента. Пожалуйста, оставьте запрос функции, если что-то важное отсутствует.


Смотрите также:

Bun от www.bunjs.com.cn