bun test 与 Bun 的运行时深度集成。这也是 bun test 快速且易于使用的原因之一。
环境变量
NODE_ENV
bun test 会自动将 $NODE_ENV 设置为 "test",除非它已经在环境变量或 .env 文件中被设置。这是大多数测试运行器的标准行为,有助于确保测试行为的一致性。
NODE_ENV 来覆盖默认值:
terminal
TZ(时区)
默认情况下,所有bun test 运行都使用 UTC(Etc/UTC)作为时区,除非通过 TZ 环境变量覆盖。这确保了不同开发环境中的日期和时间行为一致。
terminal
测试超时
每个测试默认超时为 5000 毫秒(5 秒),除非显式覆盖。超过超时时间的测试将失败。全局超时
通过--timeout 选项修改全局超时:
terminal
每个测试的超时
在测试函数的第三个参数中设置超时:无限超时
使用0 或 Infinity 禁用超时:
错误处理
未捕获的错误
bun test 监控测试间出现的未捕获 Promise 拒绝和错误。如果出现此类错误,最终退出码会是非零的(具体为此类错误的数量),即使所有测试都通过。
这有助于捕获异步代码中的错误,否则可能被忽略:
Promise 拒绝
未处理的 Promise 拒绝也会被捕获:自定义错误处理
你可以在测试设置中配置自定义错误处理器:CLI 选项集成
多个 Bun CLI 选项可与bun test 一起使用以修改其行为:
内存使用
terminal
调试
terminal
模块加载
terminal
相关安装选项
监视和热重载
监视模式
使用--watch 标志运行 bun test 时,测试运行器会监听文件更改并重新运行受影响的测试。
terminal
math.js,只有 math.test.ts 会重新执行,而不会运行所有测试。
热重载
--hot 标志提供类似的功能,但更积极地尝试在测试运行之间保留状态:
terminal
--watch,因为它提供了更好的测试隔离。
全局变量
以下全局变量在测试文件中自动可用,无需导入(但也可以从bun:test 里导入,如果你愿意):
进程集成
退出码
bun test 使用标准退出码:
0:所有测试通过,且无未捕获错误1:出现测试失败>1:未捕获错误的数量(即使测试通过)
信号处理
测试运行器正确处理常见信号:terminal
环境检测
Bun 会自动检测某些环境并调整行为:性能考虑
单进程
测试运行器默认在单个进程中运行所有测试。这带来了:- 更快的启动时间 — 无需生成多个进程
- 共享内存 — 资源使用更高效
- 简单的调试 — 所有测试都在一个进程中
- 测试共享全局状态(使用生命周期钩子进行清理)
- 一个测试崩溃可能影响其他测试
- 不支持真正的单个测试并行
内存管理
terminal