You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vitest中concurrent标记测试仅执行第一个it块问题排查

解决Vitest中it.concurrent仅执行第一个测试用例的问题

以下是几个排查和解决方向:

1. 检查第一个测试用例是否存在异步阻塞

如果第一个测试用例中有未正确处理的异步操作(比如未await Promise、未调用done()回调、存在无限循环),会导致整个测试进程挂起,后续测试无法启动。

  • 确保所有异步逻辑都被正确等待:
    // 正确示例
    it.concurrent('test 1', async () => {
      const res = await fetch('/api')
      expect(res.ok).toBe(true)
    })
    
  • 如果使用回调式异步测试,必须调用done():
    it.concurrent('test 1', (done) => {
      setTimeout(() => {
        expect(true).toBe(true)
        done() // 必须调用,否则测试会超时并阻塞后续执行
      }, 1000)
    })
    

2. 调整forks池的并发配置

当使用pool: 'forks'时,可显式设置最大fork数来确保并发能力:
修改Vitest配置文件:

import { defineConfig } from 'vitest/config'
import { AllureReporter } from 'allure-vitest'

export default defineConfig({
  test: {
    watch: false,
    pool: 'forks',
    testTimeout: 7200000,
    reporters: ['default', new AllureReporter({})],
    // 添加forks池并发配置
    poolOptions: {
      forks: {
        maxForks: 2 // 设置为你需要的并发数,比如2或系统CPU核心数
      }
    }
  },
})

3. 排查AllureReporter的兼容性问题

部分测试报告器在并行测试场景下可能存在兼容性问题,先暂时移除AllureReporter验证:

export default defineConfig({
  test: {
    watch: false,
    pool: 'forks',
    testTimeout: 7200000,
    reporters: ['default'], // 暂时移除AllureReporter
  },
})

如果移除后测试能正常并行,说明是AllureReporter的问题,尝试升级allure-vitest包到最新版本,查看其文档是否有并行测试的特殊配置要求。

4. 确认测试用例的并行写法正确

确保你确实使用了it.concurrent或describe.concurrent,而非普通的it/describe:

// 正确写法
describe.concurrent('parallel suite', () => {
  it.concurrent('test case 1', async () => {
    // 测试逻辑
  })

  it.concurrent('test case 2', async () => {
    // 测试逻辑
  })
})

注意:describe.concurrent会让整个测试套件下的所有用例并行执行,而it.concurrent仅让单个用例参与并行。


内容的提问来源于stack exchange,提问作者NadavT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:33:15