close
  • 简体中文
  • Rstest core

    本章节介绍了 Rstest 提供的一些核心方法。

    defineConfig

    此函数可用于自动补全 Rstest 配置的类型。

    • 类型:
    function defineConfig(config: RstestConfig): RstestConfig;
    function defineConfig(config: RstestConfigSyncFn): RstestConfigSyncFn;
    function defineConfig(config: RstestConfigAsyncFn): RstestConfigAsyncFn;
    function defineConfig(config: RstestConfigExport): RstestConfigExport;
    • 示例:
    import { defineConfig } from '@rstest/core';
    
    export default defineConfig({
      testTimeout: 10000,
      coverage: {
        enabled: true,
        provider: 'istanbul',
      },
    });

    defineProject

    此函数可用于自动补全 Rstest Project 配置的类型。

    • 类型:
    type NestedProjectConfig = {
      projects: (InlineProjectConfig | string)[];
    };
    
    function defineProject(config: ProjectConfig): ProjectConfig;
    function defineProject(config: NestedProjectConfig): NestedProjectConfig;
    function defineProject(config: () => ProjectConfig): () => ProjectConfig;
    function defineProject(
      config: () => NestedProjectConfig,
    ): () => NestedProjectConfig;
    function defineProject(
      config: () => Promise<ProjectConfig>,
    ): () => Promise<ProjectConfig>;
    function defineProject(
      config: () => Promise<NestedProjectConfig>,
    ): () => Promise<NestedProjectConfig>;
    • 示例:
    import { defineProject } from '@rstest/core';
    
    export default defineProject({
      root: './apps/web',
      testTimeout: 15000,
    });

    defineProject 用于项目配置文件的顶层导出。如果该文件返回一个嵌套 projects 对象,projects 里的对象项仍然属于 inline project。

    defineInlineProject 不同,defineProject 在顶层导出的 project 上不要求必须提供 name。如果省略 name,Rstest 会按照 name 配置项的规则自动推导:优先读取当前项目 package.json 中的 name,否则使用文件夹名称。

    defineInlineProject

    此函数可用于在 defineConfig({ projects: [...] }) 中自动补全内联 Project 配置的类型。内联 project 必须提供 name

    defineProject 不同,defineInlineProject 只用于 projects 数组中的对象项。由于这类 inline project 没有独立项目上下文可用于推导名称,因此必须显式提供 name

    • 类型:
    function defineInlineProject(config: InlineProjectConfig): InlineProjectConfig;
    • 示例:
    import { defineConfig, defineInlineProject } from '@rstest/core';
    
    export default defineConfig({
      projects: [
        defineInlineProject({
          name: 'web',
          root: './apps/web',
          testTimeout: 15000,
        }),
      ],
    });

    mergeRstestConfig

    将多个 Rstest 配置对象合并为单个配置。它会深度合并每个配置对象,自动将多个函数值合并为按顺序执行的函数数组,并返回合并后的配置对象。

    • 类型:
    function mergeRstestConfig(...configs: RstestConfig[]): RstestConfig;
    • 示例:
    import { mergeRstestConfig } from '@rstest/core';
    
    const config = mergeRstestConfig(
      {
        testTimeout: 5000,
      },
      {
        coverage: {
          enabled: true,
        },
      },
    );

    mergeProjectConfig

    将多个项目配置对象合并为单个配置。

    • 类型:
    function mergeProjectConfig(...configs: ProjectConfig[]): ProjectConfig;
    • 示例:
    import { mergeProjectConfig } from '@rstest/core';
    
    const config = mergeProjectConfig(
      {
        name: 'node',
        include: ['src/**/*.test.ts'],
      },
      {
        testTimeout: 10000,
      },
    );

    loadConfig

    加载 Rstest 配置。

    • 类型:
    function loadConfig(params: {
      // 默认为 process.cwd()
      cwd?: string;
      // 指定配置文件(相对路径或绝对路径)
      path?: string;
      envMode?: string;
      configLoader?: 'auto' | 'jiti' | 'native';
    }): Promise<{
      content: RstestConfig;
      filePath: string | null;
    }>;
    • 示例:
    import { loadConfig } from '@rstest/core';
    
    const { content, filePath } = await loadConfig({
      cwd: './my-project',
      path: './rstest.config.ts',
    });
    
    console.log('配置加载自:', filePath);
    console.log('配置:', content);

    如果在 cwd 目录中不存在 Rstest 配置文件,loadConfig 方法的返回值为 { content: {}, filePath: null }