sequence
- 类型:
{ hooks?: 'stack' | 'list' | 'parallel'; setupFiles?: 'list' | 'parallel' } - 默认值:
{ hooks: 'stack', setupFiles: 'list' }
配置 Rstest 生命周期 Hook 和 setup 文件的执行顺序。
sequence.hooks
- 类型:
'stack' | 'list' | 'parallel' - 默认值:
'stack'
控制每个 suite 内 Hook 的执行顺序:
'stack':beforeAll和beforeEach按声明顺序执行;afterAll和afterEach按声明的逆序执行。'list':这四种 Hook 都按声明顺序执行。从 Jest 迁移时,如果清理逻辑依赖 Hook 的注册顺序,例如先卸载组件再重置 store,可以使用此选项。'parallel':每个 suite 内的同类 Hook 并行执行,并发数受maxConcurrency限制。Runner 等待整组 Hook 结束并收集所有失败,再进入后续阶段。
嵌套 suite 中,beforeEach 仍从父 suite 到子 suite 执行,afterEach 仍从子 suite 到父 suite 执行。
beforeEach 返回的清理函数在所有 afterEach Hook 之后执行;beforeAll 返回的清理函数在所属 suite 的 afterAll Hook 之后执行。它们也跟随此配置:'stack' 按对应 setup Hook 执行的逆序清理,'list' 按相同顺序清理。对于嵌套的 beforeEach Hook,此顺序涵盖父、子 suite 返回的所有清理函数。在 'parallel' 模式下,返回的清理函数也并行执行,并发数同样受 maxConcurrency 限制。
v0.12.6 修复了清理顺序不一致的问题:此前,返回的清理函数按 setup 顺序执行,而 afterEach 和 afterAll 按逆序执行。现在,返回的清理函数默认也按 setup 的逆序执行,其执行顺序与旧版本有所不同。
同组 Hook 不依赖彼此的副作用时,可以使用 'parallel'。此模式同时适用于 Node Mode 和 Browser Mode。
并行 Hook 内的轮询断言使用配置的轮询超时,不共用任务的剩余时间;每个 Hook 仍受自身的超时限制。
此选项不影响 fixture 清理、onTestFinished 或 onTestFailed。
sequence.setupFiles
- 类型:
'list' | 'parallel' - 默认值:
'list'
控制 Node 模式和浏览器模式下,每个测试文件加载前的 setupFiles 执行方式:
'list':按配置顺序逐个执行,等待当前文件的异步初始化完成后,再执行下一个文件。'parallel':启动所有 setup 文件,等待它们的异步初始化完成后,再加载测试文件。此选项不受maxConcurrency限制。
只有 setup 文件之间不依赖彼此的副作用时,才使用 'parallel'。例如,一个 setup 安装 polyfill,另一个 setup 导入依赖该 polyfill 的库,这种情况应保持 'list'。Setup 文件仍共享测试文件的运行环境和模块缓存。
如果并行执行的 setup 失败,Rstest 会等待其他已启动的 setup 结束,报告配置顺序中第一个失败的 setup,并且不加载测试文件。此选项不影响 globalSetup。Setup 文件中注册的 Hook 按 sequence.hooks 执行;并行执行 setup 文件时,Hook 的注册顺序可能改变。