close

Utilities

一些实用的工具函数。

rstest.stubEnv

  • 别名: rs.stubEnv

  • 类型: (name: string, value: string | undefined) => Rstest

临时设置 process.envimport.meta.env 中的环境变量为指定值。适用于测试依赖环境变量的代码。

  • 如果 valueundefined,该变量会从 process.envimport.meta.env 中移除。
  • 可多次调用以模拟多个环境变量。
  • 使用 rstest.unstubAllEnvs() 可恢复所有通过此方法更改的环境变量。

示例:

rstest.stubEnv('NODE_ENV', 'test');
expect(process.env.NODE_ENV).toBe('test');
expect(import.meta.env.NODE_ENV).toBe('test');

rstest.stubEnv('MY_VAR', undefined);
expect(process.env.MY_VAR).toBeUndefined();
expect(import.meta.env.MY_VAR).toBeUndefined();

rstest.unstubAllEnvs

  • 别名: rs.unstubAllEnvs

  • 类型: () => Rstest

恢复所有通过 rstest.stubEnv 更改的环境变量到原始值。

  • 测试后调用此方法以清理环境变量。
  • 如果配置项 unstubEnvs 启用,则每个测试前会自动调用。

示例:

rstest.stubEnv('NODE_ENV', 'test');
// ... 执行相关代码
rstest.unstubAllEnvs();
expect(process.env.NODE_ENV).not.toBe('test');

rstest.stubGlobal

  • 别名: rs.stubGlobal

  • 类型: (name: string | number | symbol, value: unknown) => Rstest

临时设置全局变量为指定值。适用于模拟全局对象或函数。

  • 可多次调用以模拟多个全局变量。
  • 使用 rstest.unstubAllGlobals() 可恢复所有通过此方法更改的全局变量。

示例:

rstest.stubGlobal('myGlobal', 123);
expect(globalThis.myGlobal).toBe(123);

rstest.stubGlobal(Symbol.for('foo'), 'bar');
expect(globalThis[Symbol.for('foo')]).toBe('bar');

rstest.unstubAllGlobals

  • 别名: rs.unstubAllGlobals

  • 类型: () => Rstest

恢复所有通过 rstest.stubGlobal 更改的全局变量到原始值。

  • 测试后调用此方法以清理全局变量。
  • 如果配置项 unstubGlobals 启用,则每个测试前会自动调用。

示例:

rstest.stubGlobal('myGlobal', 123);
// ... 执行相关代码
rstest.unstubAllGlobals();
expect(globalThis.myGlobal).toBeUndefined();

rstest.setConfig

  • 别名: rs.setConfig

  • 类型:

type RuntimeConfig = {
  testTimeout?: number;
  hookTimeout?: number;
  clearMocks?: boolean;
  resetMocks?: boolean;
  restoreMocks?: boolean;
  maxConcurrency?: number;
  retry?: number;
};

type SetConfig = (config: RuntimeConfig) => void;

动态更新当前测试的运行时配置。适用于需要在单个测试文件中临时覆盖某些测试设置(如超时时间、并发数、mock 行为等)的场景。

示例:

rstest.setConfig({ testTimeout: 1000, retry: 2 });
// ... 在新的配置下运行代码
rstest.resetConfig(); // 恢复默认配置

rstest.resetConfig

  • 别名: rs.resetConfig

  • 类型: () => void

将通过 rstest.setConfig 修改的运行时配置重置为默认值。

rstest.getConfig

  • 别名: rs.getConfig

  • 类型: () => RuntimeConfig

获取当前测试文件的运行时配置。

示例:

const config = rstest.getConfig();
console.log(config);

rstest.waitFor

  • 别名: rs.waitFor

  • 类型:

type WaitForOptions = {
  timeout?: number; // 默认: 1000
  interval?: number; // 默认: 50
};

type WaitFor = <T>(
  callback: () => T | Promise<T>,
  options?: number | WaitForOptions,
) => Promise<T>;

不断重试 callback,直到其执行成功(不抛错)或超时。

  • options 为数字时,会被视为 timeout
  • 超时时会抛出 callback 最后一次抛出的错误。

示例:

await rs.waitFor(
  async () => {
    const res = await fetch(url);
    expect(res.ok).toBe(true);
  },
  { timeout: 30_000, interval: 1_000 },
);

rstest.waitUntil

  • 别名: rs.waitUntil

  • 类型:

type WaitUntilOptions = {
  timeout?: number; // 默认: 1000
  interval?: number; // 默认: 50
};

type WaitUntil = <T>(
  callback: () => T | Promise<T>,
  options?: number | WaitUntilOptions,
) => Promise<T>;

仅当 callback 没有返回值(undefinednull)或返回 falsy 值时才会继续重试;当其返回 truthy 值时会立刻 resolve。

  • options 为数字时,会被视为 timeout
  • 如果 callback 抛错,会立即中断并抛出该错误。
  • 超时时会抛出超时错误。

示例:

const serverReady = await rs.waitUntil(
  async () => {
    const status = await getServerStatus();
    return status.ready ? status : null;
  },
  { timeout: 10_000, interval: 200 },
);