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