Nuxt Test Utils 发布了 4.0.0 版本,该版本主要集成了 Vitest v4。本次更新将测试环境初始化逻辑迁移至 beforeAll,修复了模块级 mock 失效的问题;同时优化了 mockNuxtImport,实现更简洁的部分 mock 功能,并完善了注册接口的状态管理。该工具库依旧是 Nuxt 框架测试的核心库,衔接了单元测试与端到端测试。
Nuxt Test Utils发布了 4.0.0 版本,它是基于 Vue 的 Nuxt 框架的官方测试库,这是合并包生命周期中的第一个主版本发布。该版本于2026年2月7日发布,构建在单一的依赖要求之上,即 Vitest v4。相比之前要求的 Vitest v3 的版本,这次升级推动了很多重要的变化,包括测试环境初始化方式和 mock 应用方式的架构性转变。
4.0.0 版本最具影响力的改动是将 Nuxt 测试环境搭建从setupFiles迁移到了beforeAll钩子函数中。在旧版本中,执行时机的问题会导致vi.mock与mockNuxtImport无法可靠拦截中间件或插件内的组合式函数,这类组合函数常会在 mock 生效前就被执行。此次修改修复了仓库中长期存在的两个问题,均为用户反馈模块级 mock 被静默忽略的缺陷。将初始化逻辑延迟至beforeAll,可以确保 mock 注册完成后 Nuxt 才启动,让 mock 行为在整个测试套件中保持一致且可预测。
这一改动带来了一定的迁移成本。在describe代码块顶层调用 Nuxt 组合式函数,例如useRouter()、useNuxtApp(),将会抛出[nuxt] instance unavailable错误,因为此时测试环境尚未初始化。解决方案是将相关调用移入beforeAll中:
describe('router test', () => { let router: ReturnType<typeof useRouter> beforeAll(() => { router = useRouter() })})
第二项显著优化为mockNuxtImport,现在会将原始实现传入工厂函数。这让部分 mock 变得更加简洁:测试无需从零构建完整的 mock 对象,而是可以包装或扩展真实实现,再根据每条测试定制行为。
registerEndpoint工具也完成了两项针对性的修复。此前在测试间进行模块重置时,配置文件中注册的端点会丢失,该状态管理漏洞已被修复;同时,URL模式包含查询参数的端点可正常匹配了,解决了使用参数化 API 路径测试的一类故障。
依托 Vitest v4 的升级,mock 导出的规则会更加严格。此前,访问 mock 模块中工厂函数未显式返回的导出项,会静默返回undefined,而在 Vitest v4 中会直接抛出错误。推荐的修复方案是在工厂返回值中展开importOriginal,默认保留所有原始导出,仅覆盖测试需要的部分。
对等依赖的要求更加严格,happy-dom需要 20.0.11 及以上版本,jsdom需要 27.4.0 及以上版本,@jest/globals停止支持 30.0.0 以下版本,@cucumber/cucumber需要 11 及以上版本。锁定了这些工具版本的团队,需要在升级 Vitest v4 的同时更新这些依赖。
Nuxt Test Utils 在 Vue 测试生态中占据了独特地位。@vue/test-utils负责独立的组件级单元测试,Playwright、Cypress 覆盖了浏览器端到端的场景,而 Nuxt Test Utils 衔接了二者,它能够在测试环境中启动完整的 Nuxt 应用,执行服务端渲染校验,在完整的 Nuxt 插件与组合式函数上下文中挂载组件。
从 v3 进行迁移的团队可查阅Nuxt官方测试文档与4.0.0版本说明;此前使用已废弃的nuxt-vitest包的用户,可以在GitHub迁移问题中查看迁移步骤。
Nuxt Test Utils 是由 Nuxt 核心团队维护、Daniel Roe主导的开源库,基于 MIT 协议发布,每周npm的下载量超过47万次,广泛应用于 Nuxt 模块生态,为应用代码与模块开发者提供贴合框架的标准化测试支持。
查看英文原文: Nuxt Test Utils v4: Vitest v4 Requirement, Mocking Overhaul and Stricter Environment Setup





