![]()
Nuxt Test Utils 4.0.0 最近发布,核心变化就一件大事:绑定 Vitest v4。但别急着升级——这次改动把测试环境的启动时机整个后移,相当于把"先搭台后唱戏"改成了"报完节目单再搭台"。
旧版本里,mock 经常像个迟到的演员:你明明通知了它要替换某个角色,结果人家已经上台了。具体来说,vi.mock和mockNuxtImport在拦截中间件、插件里的组合式函数时,常常因为执行顺序问题被直接跳过。4.0.0 把环境初始化从setupFiles挪到beforeAll,mock 注册完毕才让 Nuxt 启动,算是给这个陈年 bug 补了票。
代价是写法要变。以前在describe顶层直接调用useRouter()没问题,现在会报错——台子还没搭好,演员当然找不到后台。得把这类调用包进beforeAll里:
describe('router test', () => { let router: ReturnType beforeAll(() => { router = useRouter() })})
mockNuxtImport也顺手优化了:工厂函数现在能拿到原始实现,想做部分 mock 不用再从零捏一个假对象,包装一下真实逻辑就行,省了不少样板代码。
另外两个小修:registerEndpoint在模块重置时不再丢配置,带查询参数的 URL 也能正常匹配了。Vitest v4 本身更严格,mock 模块里没显式返回的导出项,以前悄悄给你undefined,现在直接抛错。建议用importOriginal展开默认保留全部,只覆盖要测的部分。
对等依赖的版本要求也收紧了:happy-dom 要 20.0.11+,jsdom 要 27.4.0+,@jest/globals 30.0.0 以下不再支持。锁了旧版本的团队,升级得打包一起动。
这个库的定位挺有意思——@vue/test-utils 管组件单元测试,Playwright、Cypress 管浏览器里跑端到端,Nuxt Test Utils 卡在中间:能启完整 Nuxt 应用、验服务端渲染、在真实插件上下文里挂组件。每周 npm 下载 47 万次,Nuxt 模块生态基本绕不开它。
从 v3 迁移或从废弃的 nuxt-vitest 包转过来的,官方文档和 GitHub 迁移 issue 里有详细步骤。一个 Reddit 用户的反馈很典型:升级后终于不用在测试里写 "mock 没生效再跑一遍" 的注释了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.