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(
  {
    projects: ['packages/*'],
  },
  {
    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 }