For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt, and this page is available as Markdown at /zh/guide/testing.md.
close
  • 简体中文
  • 测试

    Rstack CLI 使用 Rstest 运行测试。

    rs test

    命令行选项和子命令请参阅 rs test

    配置测试

    通过 define.test() 注册 Rstest 配置,其用法与将配置传给 Rstest 的 defineConfig() 一致:

    rstack.config.ts
    import { define } from 'rstack';
    
    define.test({
      testEnvironment: 'node',
    });

    测试 API

    测试 API 和配置辅助函数可从 rstack/test 导入:

    import { defineInlineProject, expect, test } from 'rstack/test';

    配置继承

    define.test() 未设置 Rstest 的 extends 时,Rstack CLI 会自动将 define.app()define.lib() 注册的配置转换为 Rstest 配置,再与直接传给 define.test() 的选项合并。

    继承应用配置

    注册 define.app() 后,Rstack CLI 会通过 @rstest/adapter-rsbuild 转换该配置,并将结果作为测试配置的 extends

    rstack.config.ts
    import { define } from 'rstack';
    
    define.app({
      resolve: {
        alias: {
          '@': './src',
        },
      },
    });
    
    define.test({
      // 继承 `define.app()` 中的 `resolve.alias`
      testEnvironment: 'happy-dom',
    });

    继承库配置

    注册 define.lib() 后,Rstack CLI 会通过 @rstest/adapter-rslib 转换该配置:

    rstack.config.ts
    import { define } from 'rstack';
    
    define.lib({
      resolve: {
        alias: {
          '@': './src',
        },
      },
    });
    
    define.test({
      // 继承 `define.lib()` 中的 `resolve.alias`
      testEnvironment: 'node',
    });
    Tip

    同时注册两种配置时,Rstack CLI 会优先使用 define.app()

    关闭自动继承

    如果测试配置需要保持独立,请显式设置 extends。将它设置为空对象可以关闭自动继承,且不会继承其他配置:

    rstack.config.ts
    import { define } from 'rstack';
    
    define.app({
      resolve: {
        alias: {
          '@': './src',
        },
      },
    });
    
    define.test({
      extends: {},
      testEnvironment: 'node',
    });

    使用多项目配置时,在 define.test() 根配置中设置 extends 会关闭所有项目的自动继承;在某个内联项目中设置 extends 则只会关闭该项目的自动继承。

    多项目

    通过 Rstest 的 projects 选项可以同时运行多套测试配置。每一项既可以是内联项目,也可以是由 Rstest 解析为外部项目的字符串。

    内联项目

    不同测试环境需要共享当前应用或库配置时,请使用内联项目:

    rstack.config.ts
    import { define } from 'rstack';
    import { defineInlineProject } from 'rstack/test';
    
    define.app({
      // 由两个内联项目共享
    });
    
    define.test({
      projects: [
        defineInlineProject({
          name: 'node',
          include: ['./tests/node/**/*.test.ts'],
          testEnvironment: 'node',
        }),
        defineInlineProject({
          name: 'dom',
          include: ['./tests/dom/**/*.test.tsx'],
          testEnvironment: 'happy-dom',
        }),
      ],
    });

    Rstack CLI 会将对应的适配器应用到每个未设置 extends 的内联项目。函数形式的 define.app()define.lib() 配置只会解析一次,再由这些内联项目共享。

    按项目名称运行单个项目:

    rs test --project dom

    完整的 React SSR 示例请参阅 examples/test-inline-projects,该示例使用 Node.js 和 happy-dom 两种测试环境。

    外部项目

    使用字符串形式的配置项加载外部项目:

    rstack.config.ts
    import { define } from 'rstack';
    
    define.test({
      projects: ['./legacy/rstest.config.ts'],
    });

    Rstack CLI 会将字符串形式的项目原样传给 Rstest。外部项目会加载自己的配置,不会继承当前的 define.app()define.lib() 配置。每个项目需要独立管理配置时,请使用外部项目。