bun test 的文件发现机制确定哪些文件作为测试运行。了解其工作原理有助于你有效地组织测试文件。
默认发现逻辑
默认情况下,bun test 递归搜索项目目录以查找符合特定模式的文件:
*.test.{js|jsx|ts|tsx}- 以.test.js、.test.jsx、.test.ts或.test.tsx结尾的文件*_test.{js|jsx|ts|tsx}- 以_test.js、_test.jsx、_test.ts或_test.tsx结尾的文件*.spec.{js|jsx|ts|tsx}- 以.spec.js、.spec.jsx、.spec.ts或.spec.tsx结尾的文件*_spec.{js|jsx|ts|tsx}- 以_spec.js、_spec.jsx、_spec.ts或_spec.tsx结尾的文件
排除
默认情况下,Bun test 忽略:
node_modules目录- 隐藏目录(以句点
.开头的目录) - 没有 JavaScript 类扩展名的文件(基于可用加载器)
自定义测试发现
位置参数作为过滤器
你可以通过向 bun test 传递额外的位置参数来过滤运行哪些测试文件:
bash
bun test <filter> <filter> ...任何路径包含其中一个过滤器的测试文件都将运行。这些过滤器是简单的子字符串匹配,而不是 glob 模式。
例如,要运行 utils 目录中的所有测试:
bash
bun test utils这将匹配 src/utils/string.test.ts 和 lib/utils/array_test.js 等文件。
指定确切文件路径
要在测试运行器中运行特定文件,请确保路径以 ./ 或 / 开头,以区别于过滤器名称:
bash
bun test ./test/specific-file.test.ts按测试名称过滤
要按名称而不是文件路径过滤测试,请使用 -t/--test-name-pattern 标志和正则表达式模式:
sh
# 运行名称中包含 "addition" 的所有测试
bun test --test-name-pattern addition模式针对测试名称与所有父级 describe 块的标签连接的字符串进行匹配,用空格分隔。例如,定义为以下的测试:
ts
describe("Math", () => {
describe("operations", () => {
test("should add correctly", () => {
// ...
});
});
});将针对字符串 "Math operations should add correctly" 进行匹配。
更改根目录
默认情况下,Bun 从当前工作目录开始查找测试文件。你可以在 bunfig.toml 中使用 root 选项更改此设置:
toml
[test]
root = "src" # 仅在 src 目录中扫描测试执行顺序
测试按以下顺序运行:
- 测试文件按顺序执行(不并行)
- 在每个文件内,测试根据其定义顺序按顺序运行