配置 Rstest

配置文件

当你使用 Rstest 的 CLI 命令时,Rstest 会自动读取当前项目根目录下的配置文件,按照以下顺序进行解析:

  • rstest.config.mjs
  • rstest.config.ts
  • rstest.config.js
  • rstest.config.cjs
  • rstest.config.mts
  • rstest.config.cts

我们推荐使用 .mjs.ts 格式的配置文件,并从 @rstest/core 中导入 defineConfig 工具函数, 它提供了友好的 TypeScript 类型推导和自动补全,可以帮助你避免配置中的错误。

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

export default defineConfig({
  testEnvironment: 'node',
});

如果你在开发一个非 TypeScript 项目,可以使用 .mjs 格式的配置文件。

指定配置文件

Rstest CLI 通过 --config 选项来指定配置文件,可以设置为相对路径或绝对路径。

package.json
{
  "scripts": {
    "test": "rstest --config scripts/rstest.config.mjs"
  }
}

你也可以将 --config 选项缩写为 -c

rstest -c scripts/rstest.config.mjs

配置 Rsbuild

Rstest 的构建配置继承自 Rsbuild。因此,在 Rstest 中,你可以使用绝大部分的 Rsbuild 配置。如:

  • 通过 plugins 使用 Rsbuild 插件;
  • 通过 resolve 对模块解析行为进行配置;
  • 通过 tools.rspack 配置 Rspack;
  • 通过 tools.swc 对 builtin:swc-loader 进行配置。

更多配置可参考 构建配置

配置 Rspack

Rstest 底层使用 Rspack 进行构建,因此你可以直接使用 Rspack 的配置项来配置 Rstest 的构建行为。

详情可参考 配置 Rspack

检测 Rstest 环境

你可以使用 process.env.RSTEST 来检测是否是 Rstest 测试环境以应用不同的配置 / 代码在你的测试中。

if (process.env.RSTEST) {
  // 在 rstest 环境下将会返回 'true'
  // do something...
}

需要注意的是,如果你使用 process.env.RSTEST 在你的源码中,在生产环境构建时,在你的构建配置(如 rsbuild.config.ts)中将 process.env.RSTEST 定义为 false,这样将有助于打包工具消除无用代码。

rsbuild.config.ts
import { defineConfig } from '@rsbuild/core';

export default defineConfig({
  source: {
    define: {
+      'process.env.RSTEST': false,
    },
  },
});

如果你正在开发 Rsbuild 插件,你可以使用 api.context.callerName 来判断当前插件被调用的环境。

export const myPlugin = {
  name: 'my-plugin',
  setup(api) {
    const { callerName } = api.context;

    if (callerName === 'rstest') {
      // ...
    } else if (callerName === 'rsbuild') {
      // ...
    }
  },
};