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