bunfig.toml 和命令行选项配置 bun test。
配置文件
要在bunfig.toml 中配置 bun test,请添加一个 [test] 部分:
bunfig.toml
测试发现
root
root 选项设置 Bun 扫描测试的目录,而不是项目根目录。
bunfig.toml
示例
bunfig.toml
预加载脚本
preload 选项会在测试运行前加载脚本:
bunfig.toml
--preload:
terminal
常见预加载用例
test-setup.ts
global-mocks.ts
路径忽略模式
pathIgnorePatterns 使用 glob 模式从测试发现过程中完全排除文件和目录。与只影响覆盖率报告的 coveragePathIgnorePatterns 不同,pathIgnorePatterns 会阻止匹配的路径被发现并作为测试运行。
当项目包含子模块、第三方托管代码或其他包含 *.test.ts 文件、但不希望被 bun test 识别的目录时,可以使用此选项。
bunfig.toml
--path-ignore-patterns:
terminal
常见用例
bunfig.toml
命令行
--path-ignore-patterns 标志会完全覆盖 bunfig.toml 的值——两者不会合并。报告器
JUnit 报告器
在配置文件中直接配置 JUnit 报告器的输出文件路径:bunfig.toml
--reporter=junit 和 --reporter-outfile 相辅相成:
terminal
多重报告器
你可以同时使用多个报告器:terminal
bunfig.toml
内存使用
smol 模式
为测试运行器开启--smol 的节省内存模式:
bunfig.toml
--smol:
terminal
smol 模式通过以下方式降低内存占用:
- 使用更小的 JavaScript 堆内存
- 更积极地进行垃圾回收
- 尽可能减少缓冲区大小
测试执行
concurrentTestGlob
启用并发测试执行,运行匹配 glob 模式的测试文件。bunfig.toml
--concurrent 标志:这些文件中的每个测试都会并发运行。可以使用此配置逐步将测试套件迁移到并发执行,或者在其余测试保持串行运行的同时,并发运行某一类测试(例如集成测试)。
--concurrent CLI 标志会覆盖此设置,无论 glob 模式如何,都会强制所有测试并发运行。
randomize
随机执行测试,用于发现存在隐式依赖的测试:bunfig.toml
seed
指定用于生成可复现随机顺序的种子。需要设置randomize = true:
bunfig.toml
retry
所有测试的默认重试次数。Bun 会在测试失败时,最多按此次数重试。每个测试的{ retry: N } 会覆盖此值。默认为 0(不重试)。
bunfig.toml
--retry CLI 标志会覆盖此设置。
rerunEach
多次重新运行每个测试文件,用于发现不稳定测试:bunfig.toml
覆盖率选项
基础覆盖率设置
bunfig.toml
避免测试文件计入覆盖率
从覆盖率报告中排除匹配测试模式的文件(例如*.test.ts):
bunfig.toml
覆盖率阈值
将覆盖率阈值指定为单个数字,或指定为包含各指标阈值的对象:bunfig.toml
fail_on_low_coverage,即当实际覆盖率低于阈值时,测试运行会失败。
阈值示例
bunfig.toml
忽略路径模式
使用 glob 模式排除特定文件或文件模式不计入覆盖率报告:bunfig.toml
常见忽略模式
bunfig.toml
Source Map 处理
Bun 会转译每个文件,因此覆盖率结果会先经过 source map 处理,然后再生成报告。coverageIgnoreSourcemaps 可选择不执行此处理,但结果会令人困惑:在转译过程中,Bun 可能会移动代码并重命名变量。此选项主要用于调试覆盖率问题。
bunfig.toml
安装设置继承
bun test 会从 bunfig.toml 的 [install] 部分继承网络和安装配置(例如 registry、cafile、prefer 和 exact)。如果测试需要访问私有注册表,或在运行期间触发安装,这一点就很重要。
bunfig.toml
环境变量
使用.env 文件为测试设置环境变量,Bun 会自动从项目根目录加载这些文件。对于特定于测试的变量,创建一个 .env.test 文件,bun test 会自动加载该文件:
.env.test
完整配置示例
展示可用测试配置选项的示例:bunfig.toml
命令行覆盖行为
命令行选项总是会覆盖配置文件设置:bunfig.toml
terminal