Skip to content

retry

如果测试失败,重试指定次数。

  • 类型: number | { count?: number, delay?: number, condition?: RegExp }
  • 默认值: 0
  • 命令行终端: --retry <times>, --retry.count <times>, --retry.delay <ms>, --retry.condition <pattern>

基础用法

设置失败测试用例的重试次数。

ts
export default defineConfig({
  test: {
    retry: 3,
  },
})

命令行用法

你也可以通过命令行配置重试选项:

bash
# 简单重试次数配置
vitest --retry 3

# 使用点符号配置高级选项
vitest --retry.count 3 --retry.delay 500 --retry.condition 'ECONNREFUSED|timeout'

高级选项 4.1.0+

使用对象来配置重试行为:

ts
export default defineConfig({
  test: {
    retry: {
      count: 3, // 重试次数
      delay: 1000, // 重试间隔时间(毫秒)
      condition: /ECONNREFUSED|timeout/i, // 触发重试的正则表达式错误匹配规则
    },
  },
})

count

如果测试失败,重试的次数。默认值为 0

ts
export default defineConfig({
  test: {
    retry: {
      count: 2,
    },
  },
})

delay

重试间隔时间(毫秒)。适用于需要与限频 API 交互或等待系统恢复的测试场景,默认值为 0

ts
export default defineConfig({
  test: {
    retry: {
      count: 3,
      delay: 500, // 每次重试间隔 500 毫秒
    },
  },
})

condition

一个正则表达式模式或函数,用于根据错误判断是否应重试测试。

  • 当使用 正则表达式 时,将对错误信息进行匹配测试
  • 当使用 函数 时,该函数接收错误对象并返回布尔值

WARNING

如果将 condition 定义为函数,必须直接在测试文件中定义,而非配置文件中(配置项会被序列化供工作线程使用)。

正则表达式条件(在配置文件中):

ts
export default defineConfig({
  test: {
    retry: {
      count: 2,
      condition: /ECONNREFUSED|ETIMEDOUT/i, // 在连接/超时错误时重试
    },
  },
})

函数条件(在测试文件中):

ts
import { describe, test } from 'vitest'

describe('tests with advanced retry condition', () => {
  test('with function condition', { retry: { count: 2, condition: error => error.message.includes('Network') } }, () => {
    // 测试代码
  })
})

测试文件覆盖

你也可以在测试文件中为每个测试或测试套件定义重试选项:

ts
import { describe, test } from 'vitest'

describe('flaky tests', {
  retry: {
    count: 2,
    delay: 100,
  },
}, () => {
  test('network request', () => {
    // 测试代码
  })
})

test('another test', {
  retry: {
    count: 3,
    condition: error => error.message.includes('timeout'),
  },
}, () => {
  // 测试代码
})