Bun

查找测试

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 传递额外的 positional arguments 来过滤要运行的测试文件。

bun test <filter> <filter> ...

任何路径包含其中一个过滤器的测试文件都将运行。这些过滤器是简单的子字符串匹配,而不是 glob 模式。

例如,要运行 utils 目录中的所有测试:

bun test utils

这将匹配 src/utils/string.test.tslib/utils/array_test.js 等文件。

指定精确文件路径

要运行测试运行器中的特定文件,请确保路径以 .// 开头,以将其与过滤器名称区分开。

bun test ./test/specific-file.test.ts

按测试名称过滤

要按名称而不是文件路径过滤测试,请使用 -t/--test-name-pattern 标志和正则表达式模式。

# run all tests with "addition" in the name
bun test --test-name-pattern addition

该模式将与测试名称的连接字符串进行匹配,该字符串前面加上其所有父 describe 块的标签,并用空格分隔。例如,一个测试定义为

describe("Math", () => {
  describe("operations", () => {
    test("should add correctly", () => {
      // ...
    });
  });
});

将匹配字符串 "Math operations should add correctly"。

更改根目录

默认情况下,Bun 从当前工作目录开始查找测试文件。您可以使用 bunfig.toml 中的 root 选项来更改此设置。

[test]
root = "src"  # Only scan for tests in the src directory

执行顺序

测试按以下顺序运行:

  1. 测试文件顺序执行(不并行)
  2. 在每个文件中,测试根据其定义顺序顺序运行。