For AI agents: the complete documentation index is available at https://rstest.rs/zh/llms.txt, the full documentation bundle is available at https://rstest.rs/zh/llms-full.txt, and this page is available as Markdown at https://rstest.rs/zh/config/test/sequence.md.
close
  • 简体中文
  • 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。

    rstest.config.ts
    import { defineConfig } from '@rstest/core';
    
    export default defineConfig({
      sequence: {
        hooks: 'parallel',
      },
    });

    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 的注册顺序可能改变。

    rstest.config.ts
    import { defineConfig } from '@rstest/core';
    
    export default defineConfig({
      setupFiles: ['./setup-matchers.ts', './setup-service.ts'],
      sequence: {
        setupFiles: 'parallel',
      },
    });