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

如何让Vitest Setup Files中定义的全局变量在测试文件生效?

在Vitest中让Setup Files里的全局变量无需手动挂载window也能访问的解决方法

为什么直接用var定义的变量访问不到?

Vitest默认的setupFiles是在每个测试文件的模块作用域内执行的,你用var声明的变量只属于当前setup模块的局部作用域,测试文件作为独立模块自然访问不到。而挂载到window上相当于把变量放到了全局浏览器环境的顶层对象,所有模块都能访问。

两种解决办法:

1. 改用全局作用域的Setup文件

把你的Setup文件配置到setupFilesGlobal而不是setupFiles,这个配置项会让代码在全局作用域执行,声明的变量会成为真正的全局变量,测试文件直接就能调用:

// vitest.config.js
export default {
  test: {
    setupFilesGlobal: ['./path/to/your-setup-file.js']
  }
}

然后在你的setup文件里直接写:

var lol = 'lol'

测试文件里就能直接用lol了。

2. 自动批量挂载变量到window

如果不想改配置,或者需要批量处理多个全局变量,可以写个简单的遍历逻辑自动挂载:

// 你的setup文件
// 把需要全局访问的变量都放到一个对象里
const globalVars = {
  lol: 'lol',
  foo: 'bar',
  utils: { /* 一些工具函数 */ }
}

// 遍历挂载到window
Object.entries(globalVars).forEach(([key, value]) => {
  window[key] = value
})

这样不用逐个写window.xxx,一次性搞定所有变量的全局访问。

注意事项

用setupFilesGlobal的时候要留意全局变量污染问题——所有测试文件共享这些变量,可能导致测试用例之间的干扰。如果有需要,可以在测试的beforeEach/afterEach钩子中清理这些全局变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:50:29