- TypeScript 和 JSX
- 生命周期钩子
- 快照测试
- UI 和 DOM 测试
- 带
--watch的监视模式 - 通过
--preload预加载脚本
Bun 的目标是与 Jest 兼容,但并非所有功能都已实现。要跟踪兼容性,请参阅此跟踪问题。
运行测试
terminal
math.test.ts
*.test.{js|jsx|ts|tsx|mjs|cjs|mts|cts}*_test.{js|jsx|ts|tsx|mjs|cjs|mts|cts}*.spec.{js|jsx|ts|tsx|mjs|cjs|mts|cts}*_spec.{js|jsx|ts|tsx|mjs|cjs|mts|cts}
bun test 传递额外的位置参数。路径匹配任一过滤器的测试文件将被运行。过滤器通常为文件或目录名称;尚不支持 glob 模式。
terminal
-t/--test-name-pattern 标志。
terminal
./ 或 / 开头,以便与过滤器名称区分。
terminal
--preload 脚本(参见生命周期),然后运行所有测试。如果测试失败,测试运行器将以非零退出码退出。
CI/CD 集成
bun test 支持多种 CI/CD 集成。
GitHub Actions
bun test 自动检测是否在 GitHub Actions 中运行,并直接将 GitHub Actions 注释输出到控制台。
除了在工作流中安装 bun 并运行 bun test 外,无需任何配置。
如何在 GitHub Actions 工作流中安装 bun
要在 GitHub Actions 工作流中使用 bun test,请添加以下步骤:
.github/workflows/test.yml
JUnit XML 报告(GitLab 等)
要生成 JUnit XML 报告,请将--reporter=junit 与 --reporter-outfile 一起使用。
terminal
bun test 照常输出到 stdout/stderr,并在运行结束时将 JUnit XML 报告写入指定路径。
JUnit XML 是 CI/CD 管道中报告测试结果的流行格式。
超时
使用--timeout 标志指定每个测试的超时时间(毫秒)。如果测试超时,将被标记为失败。默认值为 5000。
terminal
并发测试执行
默认情况下,Bun 在每个测试文件内顺序运行所有测试。并发执行可并行运行异步测试,从而加速包含独立测试的测试套件。--concurrent 标志
使用 --concurrent 标志可在各自文件中并发运行所有测试:
terminal
test.serial。
--max-concurrency 标志
使用 --max-concurrency 标志控制同时运行的最大测试数:
terminal
test.concurrent
即使未使用 --concurrent 标志,也可以标记个别测试为并发运行:
math.test.ts
test.serial
强制测试按顺序运行,即使启用了 --concurrent 标志:
math.test.ts
重试失败的测试
使用--retry 标志自动重试失败的测试最多指定次数。如果测试失败后在下一次尝试中通过,则报告为通过。
terminal
{ retry: N } 会覆盖全局 --retry 值:
bunfig.toml 中设置:
bunfig.toml
重复运行测试
使用--rerun-each 标志多次运行每个测试。这有助于发现不稳定或非确定性的测试失败。
terminal
随机化测试执行顺序
使用--randomize 标志以随机顺序运行测试。这有助于检测依赖于共享状态或执行顺序的测试。
terminal
--randomize 时,用于随机化的种子会显示在测试摘要中:
terminal
使用 --seed 实现可重现的随机顺序
使用 --seed 标志指定随机化种子,以便在调试顺序相关故障时重现相同的测试顺序。
terminal
--seed 标志隐包含 --randomize,因此无需同时指定两者。相同的种子总是产生相同的测试执行顺序。
使用 --bail 提前终止
使用 --bail 标志在指定数量的测试失败后中止测试运行。默认情况下,Bun 运行所有测试并报告所有失败,但在 CI 中,提前停止以减少 CPU 使用率可能更可取。
terminal
监视模式
与bun run 一样,bun test 接受 --watch 标志来监视文件更改并重新运行测试。
terminal
生命周期钩子
Bun 支持以下生命周期钩子:
在测试文件中定义钩子,或在通过
--preload 标志预加载的单独文件中定义。
terminal
模拟
使用mock 函数创建模拟函数。
math.test.ts
jest.fn();其行为完全相同。
math.test.ts
快照测试
bun test 支持快照测试。
math.test.ts
--update-snapshots 标志。
terminal
UI 和 DOM 测试
Bun 与流行的 UI 测试库兼容: 参见DOM 测试。性能
Bun 的测试运行器速度很快。
AI Agent 集成
当你使用 Bun 的测试运行器配合 AI 编码助手时,可以启用更简洁的输出,保留失败详情但去掉其余噪音。环境变量
设置以下任一环境变量以启用 AI 友好输出:CLAUDECODE=1- 用于 Claude CodeREPL_ID=1- 用于 ReplitAGENT=1- 通用 AI Agent 标志
行为
当检测到 AI Agent 环境时:- 仅详细显示测试失败信息
- 隐藏通过、跳过和待办测试指示器
- 摘要统计信息保持不变
terminal
CLI 用法
执行控制
设置每个测试的超时时间(毫秒,默认 5000)
每个测试文件重复运行
NUMBER 次,以帮助捕获某些错误失败测试最多重试
NUMBER 次。被每个测试的 覆盖将所有测试视为
test.concurrent() 测试以随机顺序运行测试
设置测试随机化的随机种子
在
NUMBER 次失败后退出测试套件。如果不指定数字,默认为 1。同时执行的最大并发测试数(默认 20)
测试过滤
包含标记为
test.todo() 的测试仅运行名称匹配给定正则表达式的测试。别名:
-t报告
测试输出报告器格式。可用:
junit(需要 —reporter-outfile)、dots。默认:控制台输出。报告器格式的输出文件路径(与 —reporter 配合使用)
启用 dots 报告器。—reporter=dots 的简写
覆盖率
生成覆盖率分析文档
以
text 和/或 lcov 格式报告覆盖率。默认为 text覆盖率文件的目录。默认为
coverage快照
更新快照文件。别名:
-u示例
运行所有测试文件:terminal
terminal
terminal