Skip to main content
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

无限超时

使用 0Infinity 来禁用超时:
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