用途
bun-test 技能用于配置 Bun 自带的内置测试运行器。它使用与 Jest 兼容的 API,资料称其执行速度明显快于 Jest(约为 Jest 的 3-10 倍)。适用于搭建测试基础设施、编写单元测试、集成测试、API 测试与快照测试,以及将现有 Jest 测试迁移到 Bun。
主要能力
- Jest 兼容 API:提供 describe、it、test、expect、mock、spyOn、beforeAll、afterAll、beforeEach、afterEach 等。
- 多种测试类型:单元测试、集成测试、API 测试(HTTP 端点)、快照测试(toMatchSnapshot 与 toMatchInlineSnapshot)。
- Mock 与 Spy:mock(fn) 创建 mock 函数,spyOn(obj, "method") 监视方法;支持 toHaveBeenCalledTimes、toHaveBeenCalledWith、toHaveReturnedWith 等断言。
- 覆盖率:通过 --coverage 生成报告,可在 bunfig.toml 中设置 coverage、coverageDir、coverageThreshold。
- 运行控制:--watch 监视模式、--test-name-pattern 按名称过滤、--inspect 调试、--verbose 详细输出、--reporter=tap / html 等报告格式。
- 配置项:bunfig.toml 的 [test] 段支持 preload、coverage、coverageDir、coverageThreshold、timeout、bail。
使用方式
前置检查:运行 bun --version 验证 Bun 安装,检查 package.json 是否存在。
创建测试目录结构,例如 tests/{unit,integration,fixtures},并按需创建 tests/setup.ts。
在项目根目录创建 bunfig.toml,配置 [test] 段,如 preload = ["./tests/setup.ts"]、coverage = true、coverageDir = "coverage"、coverageThreshold = 80、timeout = 5000、bail = false。
在 setup 文件中使用 beforeAll、afterAll、beforeEach、afterEach 做全局初始化和清理。
编写测试时从 bun:test 导入 API,例如 import { describe, it, expect, test } from "bun:test"。
在 package.json 中添加脚本:test 为 bun test,test:watch 为 bun test --watch,test:coverage 为 bun test --coverage,test:ui 为 bun test --coverage --reporter=html。
运行:bun test 运行全部;bun test tests/unit/utils.test.ts 运行指定文件;bun test --watch 监视模式;bun test --coverage 覆盖率;bun test --test-name-pattern="should handle" 按名称过滤。
Jest 迁移
资料提供 jest-migration.md,涵盖导入更新(@jest/globals → bun:test)、mock 语法变化(jest.fn() → mock())、配置迁移与兼容性说明。示例:Jest 中 import { describe, it, expect } from '@jest/globals' 与 const mockFn = jest.fn(),迁移后为 import { describe, it, expect, mock } from 'bun:test' 与 const mockFn = mock()。
适用场景
需要为项目搭建测试基础设施;编写单元、集成、API 或快照测试;从 Jest 迁移到 Bun;在 CI/CD 中运行测试;设置覆盖率报告和提交前钩子。
限制与说明
资料未提供 bun-test 的收费、价格、平台支持范围等商业信息。性能对比数据(如 Jest 约 15 秒 / 100 个测试,Bun 约 2 秒 / 100 个测试)来自资料原文,实际表现可能因环境而异。详细实现请参考资料中提到的参考文件(jest-migration.md、mocking.md、examples.md)。