> For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt.

# Rstest core

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

## defineConfig

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

- **类型：**

```ts
function defineConfig(config: RstestConfig): RstestConfig;
function defineConfig(config: () => RstestConfig): () => RstestConfig;
function defineConfig(
  config: () => Promise<RstestConfig>,
): () => Promise<RstestConfig>;
```

- **示例：**

直接传入配置对象：

```ts
import { defineConfig } from '@rstest/core';

export default defineConfig({
  testTimeout: 10000,
  coverage: {
    enabled: true,
    provider: 'istanbul',
  },
});
```

通过同步 factory 返回配置：

```ts
import { defineConfig } from '@rstest/core';

export default defineConfig(() => ({
  testTimeout: 10000,
}));
```

通过异步 factory 返回配置：

```ts
import { defineConfig } from '@rstest/core';

export default defineConfig(async () => ({
  testTimeout: 10000,
}));
```

## defineProject

此函数可用于自动补全 [Rstest Project](/zh/guide/basic/projects.md) 配置的类型。

- **类型：**

```ts
type NestedProjectConfig = {
  projects: (InlineProjectConfig | string)[];
};

type ProjectConfigExport = ProjectConfig | NestedProjectConfig;

function defineProject(config: ProjectConfig): ProjectConfig;
function defineProject(config: NestedProjectConfig): NestedProjectConfig;
function defineProject(
  config: () => ProjectConfigExport,
): () => ProjectConfigExport;
function defineProject(
  config: () => Promise<ProjectConfigExport>,
): () => Promise<ProjectConfigExport>;
```

- **示例：**

直接传入项目配置对象：

```ts
import { defineProject } from '@rstest/core';

export default defineProject({
  root: './apps/web',
  testTimeout: 15000,
});
```

通过同步 factory 返回项目配置：

```ts
import { defineProject } from '@rstest/core';

export default defineProject(() => ({
  root: './apps/web',
  testEnvironment: 'node',
}));
```

通过异步 factory 返回项目配置：

```ts
import { defineProject } from '@rstest/core';

export default defineProject(async () => ({
  root: './apps/web',
  testEnvironment: 'node',
}));
```

定义多个嵌套项目：

```ts
import { defineProject } from '@rstest/core';

export default defineProject({
  projects: [
    {
      name: 'web',
      root: './apps/web',
    },
    {
      name: 'server',
      root: './apps/server',
    },
  ],
});
```

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

与 `defineInlineProject` 不同，`defineProject` 在顶层导出的 project 上不要求必须提供 `name`。如果省略 `name`，Rstest 会按照 [name](/zh/config/test/name.md) 配置项的规则自动推导：优先读取当前项目 `package.json` 中的 `name`，否则使用文件夹名称。

## defineInlineProject


[Added in v0.9.6](https://github.com/web-infra-dev/rstest/releases/tag/v0.9.6)

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

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

- **类型：**

```ts
function defineInlineProject(config: InlineProjectConfig): InlineProjectConfig;
```

- **示例：**

```ts
import { defineConfig, defineInlineProject } from '@rstest/core';

export default defineConfig({
  projects: [
    defineInlineProject({
      name: 'web',
      root: './apps/web',
      testTimeout: 15000,
    }),
  ],
});
```

## mergeRstestConfig

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

- **类型：**

```ts
function mergeRstestConfig(...configs: RstestConfig[]): RstestConfig;
```

- **示例：**

```ts
import { mergeRstestConfig } from '@rstest/core';

const config = mergeRstestConfig(
  {
    testTimeout: 5000,
  },
  {
    coverage: {
      enabled: true,
    },
  },
);
```

## mergeProjectConfig

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

- **类型：**

```ts
function mergeProjectConfig(...configs: ProjectConfig[]): ProjectConfig;
```

- **示例：**

```ts
import { mergeProjectConfig } from '@rstest/core';

const config = mergeProjectConfig(
  {
    name: 'node',
    include: ['src/**/*.test.ts'],
  },
  {
    testTimeout: 10000,
  },
);
```

## loadConfig

加载 Rstest 配置。

- **类型：**

```ts
function loadConfig(params?: {
  // 默认为 process.cwd()
  cwd?: string;
  // 指定配置文件（相对路径或绝对路径）
  path?: string;
  envMode?: string;
  configLoader?: 'auto' | 'jiti' | 'native';
}): Promise<{
  content: RstestConfig;
  filePath: string | null;
  dependencies: string[];
}>;
```

- **示例：**

```ts
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, dependencies: [] }`。
