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

如何在Vitest的afterAll中获取测试结果,仅在全通过时执行清理?

在Vitest的afterAll中仅当全量测试通过时执行清理函数

Vitest支持获取测试运行结果的方式,可以实现仅在所有测试通过时执行清理逻辑,以下是两种可行方案:

方案一:通过测试运行器的全局结果判断

直接在afterAll中获取测试运行器实例,检查所有测试文件的执行状态:

afterAll(async () => {
  const runner = vi.getRunner();
  // 验证所有测试文件的执行状态均为通过
  const allPassed = runner.state.results.every(result => result.state === 'pass');
  
  if (allPassed) {
    // 执行自定义清理逻辑
    await yourTeardownFunction();
  }
});
  • runner.state.results存储了每个测试文件的汇总结果,state属性取值包括pass、fail、skip等
  • 该方案适合按文件维度判断整体测试是否通过

方案二:实时监听单个测试用例结果

通过注册全局事件监听,跟踪每个测试用例的执行状态,确保无任何用例失败时才执行清理:

let hasFailedCase = false;

beforeAll(() => {
  const runner = vi.getRunner();
  // 监听每个测试用例完成事件
  runner.onTestFinished((test) => {
    if (test.result?.state === 'fail') {
      hasFailedCase = true;
    }
  });
});

afterAll(async () => {
  if (!hasFailedCase) {
    await yourTeardownFunction();
  }
});
  • 该方案可以精准捕获单个测试用例的失败情况,避免因测试文件汇总状态误判导致的清理执行问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:07