close

命令行工具

Rstest 提供了一个轻量级的命令行工具,包含 rstest watchrstest run 等命令。

rstest -h

rstest -h 可帮助你查看所有可用的 CLI 命令及选项:

npx rstest -h

输出如下:

Usage:
  $ rstest [...filters]

Commands:
  [...filters]              run tests
  run [...filters]          run tests without watch mode
  watch [...filters]        run tests in watch mode
  list [...filters]         lists all test files that Rstest will run
  merge-reports [path]      Merge blob reports from multiple shards into a unified report
  init [project]            Initialize rstest configuration

Options:
  -h, --help                Display this message
  -v, --version             Display version number

可以通过 npx rstest <command> -h 查看命令专属参数。例如,npx rstest init -h 只会显示初始化相关参数,而 npx rstest merge-reports -h 只会显示合并报告相关参数。

rstest [...filters]

直接运行 rstest 命令将会在当前目录执行 Rstest 测试。

$ npx rstest

 test/index.test.ts (2 tests) 1ms

  Test Files 1 passed (1)
       Tests 2 passed (2)
    Duration 189 ms (build 22 ms, tests 167 ms)

Watch 模式

如果你希望在文件更改时自动重新运行测试,可以使用 --watchrstest watch 命令:

$ npx rstest --watch

rstest run

rstest run 将会执行单次测试,该命令适用于 CI 环境或不需要一边修改一边执行测试的场景。

rstest watch

rstest watch 将会启动监听模式并执行测试,当测试或依赖文件修改时,将重新执行关联的测试文件。

rstest list

rstest list 将会打印所有匹配条件的测试列表。默认情况下,它将打印所有匹配条件的测试名称。

$ npx rstest list

# 输出如下:
a.test.ts > test a > test a-1
a.test.ts > test a-2
b.test.ts > test b > test b-1
b.test.ts > test b-2

rstest list 命令继承所有 rstest 过滤选项,你可以直接过滤文件或使用 -t 过滤指定的测试名称。

$ npx rstest list -t='test a'

# 输出如下:
a.test.ts > test a > test a-1
a.test.ts > test a-2

你可以使用 --filesOnly 使其仅打印测试文件:

$ npx rstest list --filesOnly

# 输出如下:
a.test.ts
b.test.ts

你可以使用 --json 使其以 JSON 格式打印测试或将结果保存到单独的文件中:

$ npx rstest list --json

$ npx rstest list --json=./output.json

您可以使用 --includeSuites 选项,在打印测试用例的同时输出测试套件信息:

$ npx rstest list

# 输出如下:
a.test.ts > test a
a.test.ts > test a > test a-1
a.test.ts > test a-2
b.test.ts > test b
b.test.ts > test b > test b-1
b.test.ts > test b-2

您可以使用 --printLocation 选项来打印测试的位置信息:

$ npx rstest list

# 输出如下:
a.test.ts:4:5 > test a > test a-1
a.test.ts:9:3 > test a-2
b.test.ts:4:5 > test b > test b-1
b.test.ts:9:3 > test b-2

你可以使用 --summary 在列表输出后追加一段简要统计:

$ npx rstest list --summary

# 输出如下:
a.test.ts > test a > test a-1
a.test.ts > test a-2
b.test.ts > test b > test b-1
b.test.ts > test b-2
c.test.ts > test c it each 0
c.test.ts > test c it for 0
c.test.ts > test c it runIf
c.test.ts > test c it skipIf

 Test Files 3 matched
      Tests 8 matched

当与 --json 一起使用时,--summary 会把 JSON 输出从数组切换为包含 itemssummary 字段的对象。

rstest merge-reports

rstest merge-reports 将多个测试分片生成的 blob 报告合并为一个统一的报告。当使用 --shard 在多台 CI 机器上并行运行测试时,这非常有用。

工作流程

  1. 使用 blob 报告器运行每个分片以生成 blob 报告文件:
# 在 CI 机器 1 上
npx rstest run --shard 1/3 --reporter=blob

# 在 CI 机器 2 上
npx rstest run --shard 2/3 --reporter=blob

# 在 CI 机器 3 上
npx rstest run --shard 3/3 --reporter=blob
  1. 将所有 .rstest-reports/ 目录收集到同一位置,然后合并:
npx rstest merge-reports

默认情况下,blob 报告从项目根目录的 .rstest-reports/ 读取。你可以指定自定义路径:

npx rstest merge-reports ./custom-reports-dir

合并命令将:

  • 合并所有分片的测试结果
  • 使用配置的报告器(如 defaultjunit)输出合并后的数据
  • 合并并生成覆盖率报告(如果启用了覆盖率)

使用 --cleanup 在合并完成后删除 blob 报告目录:

npx rstest merge-reports --cleanup

rstest init

rstest init 用于为支持的项目类型生成初始配置。

npx rstest init

当前可用的初始化目标是 browser

npx rstest init browser

使用 --yes 可以跳过交互式提问,直接应用默认配置:

npx rstest init browser --yes

CLI 选项

Rstest CLI 参数是按命令注册的,并不是所有命令共享同一套参数。

测试命令

rstestrstest runrstest watch 共享同一组测试运行参数:

参数说明
-c, --config <config>指定配置文件路径(相对或绝对路径),详见 指定配置文件
--config-loader <loader>指定配置加载器 (auto | jiti | native),详见 Rsbuild - 指定加载方式
-r, --root <root>指定项目根目录,详见 root
--globals提供全局 API,详见 globals
--isolate在隔离环境中运行测试,详见 isolate
--exclude <exclude>排除指定文件,详见 exclude
-u, --update更新快照文件,详见 update
--coverage启用代码覆盖率收集,详见 coverage
--passWithNoTests当未找到测试文件时允许测试通过,详见 passWithNoTests
--printConsoleTrace调用 console 方法时打印调用栈,详见 printConsoleTrace
--project <name>仅运行指定项目的测试,详见 根据项目名称过滤
--disableConsoleIntercept禁用 console 拦截,详见 disableConsoleIntercept
--slowTestThreshold <value>设置测试或套件被视为慢的阈值(毫秒),详见 slowTestThreshold
-t, --testNamePattern <value>仅运行名称匹配正则的测试,详见 testNamePattern
--testEnvironment <name>指定测试环境,详见 testEnvironment
--testTimeout <value>设置单个测试的超时时间(毫秒),详见 testTimeout
--hookTimeout <value>设置单个测试 hook 的超时时间(毫秒),详见 hookTimeout
--retry <retry>测试失败时重试次数,详见 retry
--bail [number]指定个数的测试失败后停止运行,详见 bail
--browser, --browser.enabled在浏览器模式下运行测试,详见 browser
--browser.name <name>使用的浏览器:chromiumfirefoxwebkit(默认:chromium),详见 browser
--browser.headless在无头模式下运行浏览器(CI 环境默认:true),详见 browser
--browser.port <port>浏览器模式开发服务器的端口,详见 browser
--browser.strictPort如果指定端口已被占用则退出,详见 browser
--reporter <reporter>指定测试报告器,详见 reporters
--maxConcurrency <value>最大并发测试数,详见 maxConcurrency
--clearMocks每个测试前自动清除 mock 调用、实例、上下文和结果,详见 clearMocks
--resetMocks每个测试前自动重置 mock 状态,详见 resetMocks
--restoreMocks每个测试前自动恢复 mock 状态和实现,详见 restoreMocks
--unstubGlobals每个测试前恢复被 rstest.stubGlobal 修改的全局变量,详见 unstubGlobals
--unstubEnvs每个测试前恢复被 rstest.stubEnv 修改的 process.env,详见 unstubEnvs
--include <include>指定测试文件匹配模式,详见 include
--logHeapUsage打印每个测试的堆内存使用情况,详见 logHeapUsage
--hideSkippedTests不展示跳过测试的日志,详见 hideSkippedTests
--hideSkippedTestFiles不展示跳过测试文件的日志,详见 hideSkippedTestFiles
--pool <type>--pool.type 的 shorthand,详见 pool
--pool.type <type>指定测试线程池类型,详见 pool
--pool.maxWorkers <value>最大 worker 数量或百分比,详见 pool
--pool.minWorkers <value>最小 worker 数量或百分比,详见 pool
--pool.execArgv <arg>传给 worker 进程的额外 Node.js execArgv(可重复传入),详见 pool
-h, --help显示帮助信息

rstest 默认命令还额外支持 -w, --watch,可直接切换到 watch 模式。

rstest list

rstest list 支持上面测试命令的过滤和配置参数,并额外提供:

参数说明
--filesOnly仅输出匹配到的测试文件
--json [boolean/path]以 JSON 输出,或写入文件
--includeSuites在输出中包含 suite
--printLocation输出测试和 suite 的位置信息
--summary在列表后输出简要统计

rstest merge-reports

rstest merge-reports 只注册一组更小的参数集合:

参数说明
-c, --config <config>指定配置文件路径(相对或绝对路径),详见 指定配置文件
--config-loader <loader>指定配置加载器 (auto | jiti | native),详见 Rsbuild - 指定加载方式
-r, --root <root>指定项目根目录,详见 root
--coverage合并完成后生成覆盖率报告,详见 coverage
--reporter <reporter>指定在合并结果上运行的报告器,详见 reporters
--cleanup合并完成后删除 blob 报告目录
-h, --help显示帮助信息

rstest init

rstest init 只接受初始化相关参数:

参数说明
--yes使用默认选项并跳过交互界面
-h, --help显示帮助信息

布尔选项取反

对于布尔类型的选项,你可以使用 --no-<option> 前缀来将其设置为 false。例如:

# 以下两种写法等价:
npx rstest --isolate false
npx rstest --no-isolate

# 更多示例:
npx rstest --no-coverage      # 禁用覆盖率
npx rstest --no-globals        # 禁用全局 API
npx rstest --no-clearMocks     # 禁用自动清除 mock

CLI 快捷键

在 watch 模式下运行 Rstest 时,你可以使用键盘快捷键来执行各种便捷操作。

所有快捷键:

  Shortcuts:
  f  rerun failed tests
  a  rerun all tests
  u  update snapshot
  t  filter by a test name regex pattern
  p  filter by a filename regex pattern
  q  quit process
  c  clear screen
  h  show shortcuts help
Note

CLI 快捷键仅在 watch 模式下运行 Rstest(rstest watchrstest --watch)且终端支持 TTY(交互模式)时可用。