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

无限超时

使用 0Infinity 可禁用超时:
test.ts

错误处理

未捕获的错误

bun test 会跟踪未处理的 Promise 拒绝,以及测试之间发生的错误。如果发生任何此类错误,即使所有测试都通过,最终退出代码也会是非零值。 这有助于捕获异步代码中的错误,否则可能被忽略:
test.ts

Promise 拒绝

未处理的 Promise 拒绝也会被捕获:
test.ts

自定义错误处理

你可以在测试设置中配置自定义错误处理器:
test-setup.ts

CLI 选项集成

Several Bun CLI flags also work with 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