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

如何在Vitest中使用全局变量?Vue遗留项目测试遇阻求助

解决Vitest测试中config全局变量未定义的问题

以下是几个可行的解决步骤,按优先级尝试:

1. 确保Vitest配置正确加载setup文件

首先检查你的vitest.config.ts是否正确指定了setup文件,很多时候问题出在setup文件根本没被执行:

import { defineConfig } from 'vitest/config'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  test: {
    environment: 'happy-dom',
    globals: true,
    // 明确指定setup文件路径
    setupFiles: ['./vitest.setup.ts'],
  }
})

2. 在setup文件中正确挂载config到全局对象

不要用const config = {}这种局部定义,要直接挂载到globalThis(happy-dom环境下的全局对象是globalThis,而非Node.js的global):

// vitest.setup.ts
globalThis.config = {
  // 填入测试需要的配置项,比如和生产环境一致的结构
  apiBaseUrl: 'https://test.example.com',
  appName: 'Test App'
}

如果用populateGlobal,也要针对globalThis操作:

// vitest.setup.ts
import { populateGlobal } from '@vitest/spy'

populateGlobal(globalThis, {
  config: {
    // 测试配置项
  }
})

3. 修复TypeScript类型提示(避免编辑器报错)

在项目根目录或types文件夹下创建vitest-env.d.ts文件,补充全局类型定义:

// vitest-env.d.ts
declare global {
  interface Window {
    config: {
      // 这里定义你的config结构,比如:
      apiBaseUrl: string
      appName: string
    }
  }

  interface GlobalThis {
    config: Window['config']
  }
}

export {}

然后确保tsconfig.json的include数组包含这个文件:

{
  "include": ["src/**/*", "vitest.setup.ts", "vitest-env.d.ts"]
}

4. 单测试文件临时挂载(全局setup失效时的应急方案)

如果全局配置还是不生效,可以在单个测试文件中手动挂载:

// 你的测试文件.spec.ts
beforeAll(() => {
  globalThis.config = { /* 测试配置 */ }
})

afterAll(() => {
  // 测试结束后清理全局变量,避免影响其他测试
  delete globalThis.config
})

test('example test', () => {
  expect(config.apiBaseUrl).toBe('https://test.example.com')
})

内容的提问来源于stack exchange,提问作者Ricardo de Vries

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:13:13