写点什么

Vitest 4.1:测试标签、原生 Node.js 执行和 AI 代理报告器

作者:Daniel Curtis
  • 2026-05-07
    北京
  • 本文字数:1313 字

    阅读完需:约 4 分钟

由 VoidZero 维护的 Vite 原生测试框架 Vitest 发布 4.1 版本,带来了一系列新功能和工具增强,旨在让 JavaScript 测试更加条理清晰、贴近生产环境。

Vitest 4.1 引入了多项值得关注的新功能,包括用于筛选和配置测试组的测试标签、可完全绕过 Vite 模块运行器的实验性模式、新的生命周期钩子、经过改进的 test fixture 类型推断,以及专为 AI 编码代理设计的报告器。该版本自发布之日起即全面支持 Vite 8

其中一项突出的功能是测试标签,其灵感源自 Python 的 pytest 标记。通过标签,开发者可以添加测试标记,并针对每个标签应用共享配置(例如超时或重试次数)。该功能是应用户需求而添加的,2025 年 10 月的一条 GitHub 问题中提到:“我来自 Pytest,我非常怀念这种在大多数测试框架中都有的简单的测试标记功能。” 过滤语法支持逻辑运算符和通配符,支持使用 vitest --tags-filter=“frontend && !flaky” 这样的模式,在运行前端测试的同时排除了不可靠的测试。

另一个重要的新增功能是实验性的 viteModuleRunner: false 选项。它可以禁用 Vite 的模块运行器沙箱,并使用原生 Node.js 导入来运行测试,而且不会应用任何文件转换,从而实现更快的启动速度,并更接近生产环境的行为。对于使用 Node.js 22.18+ 或 23.6+ 的开发者,TypeScript 的类型会被原生剥离,无需任何额外的配置。Vitest GitHub 上的一个讨论确认,该选项也适用于 Bun,但存在一些缺失的功能:

到目前为止,我注意到的缺失功能只有:

- 模块模拟——可以通过从 bun:test 导入原生模拟来轻松解决

- 代码覆盖率——除非 Bun 暴露自定义覆盖率 API 或添加对 V8 API 的支持,否则无法使用(可能性不大?)

该版本引入了 aroundEach 和 aroundAll 钩子,用于将测试封装在数据库事务或追踪跨度等上下文中,并新增了 test.extend 构建器模式,支持类型推断而无需手动声明类型。

对于持续集成(CI)工作流,内置的 github-actions 报告器现在可以生成包含测试统计数据和不稳定测试标记的任务摘要。当 Vitest 检测到其正在 AI 编码代理内部运行时,新曾的 agent 报告器会减少令牌使用量,并隐藏通过测试的结果及控制台日志。

该版本发布后,有人在 GitHub 上提交了几个问题,目前都已经修复。其中一个问题指出,在 4.1.0 版本中,除非添加了 @preserve 注解,否则覆盖率忽略提示(v8 ignore if、v8 ignore next)将无法正常工作,相较于早期版本而言,这是一种退化。另一个问题则指出,更新后的 Vite 对等依赖语法导致 Yarn Classic(v1.x)用户的安装出现故障。

与 Jest 相比,Vitest 的性能优势不断扩大。SitePoint 针对一个包含 50000 个测试用例的生产级单体库进行了基准测试,结果显示,Vitest 不仅冷启动更快、监听模式重跑速度更快,峰值内存占用也更低。对于考虑迁移的团队,Vitest 提供了一份迁移指南,涵盖了从 Jest 以及早期 Vitest 版本迁移的流程,并指出其 API 设计仍然与 Jest 兼容。

Vitest 是一个由 VoidZero 维护的开源测试框架。它基于 Vite 构建,复用了相同的配置、解析和转换管道,非常适合基于 Vite 的项目,同时也支持搭配 React、Angular、Vue 和 Node.js 等框架使用。

原文链接:

https://www.infoq.com/news/2026/05/vitest-4-1-ai-agents/