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
相关产品推荐
相关产品推荐

