bun test 与 Bun 运行时深度集成。这是让 bun test 快速且易于使用的原因之一。
环境变量
NODE_ENV
除非已在环境或.env 文件中设置了 $NODE_ENV,否则 bun test 会自动将其设置为 "test"。这对于大多数测试运行器来说是标准行为,有助于确保测试行为的一致性。
NODE_ENV 来覆盖此行为:
terminal
TZ(时区)
默认情况下,除非被TZ 环境变量覆盖,所有 bun test 运行都使用 UTC(Etc/UTC)作为时区。这确保了不同开发环境中日期和时间行为的一致性。
terminal
测试超时
如果没有显式覆盖,每个测试都有 5000ms(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