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

