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

React Vite项目中如何为Jest模拟process环境变量

解决Jest测试中import.meta.env.APP_ENV为undefined的问题

原因

Vite的define配置是在构建阶段做静态字符串替换,而Jest运行测试时不会经过Vite的构建流程,所以import.meta.env.APP_ENV不会被替换成process.env.ENV的对应值,自然返回undefined。直接设置process.env.ENV也没用,因为Jest没触发Vite的替换逻辑。

解决方案

方案1:在Jest配置中全局模拟import.meta.env

  1. 创建jest.setup.js初始化文件:
// jest.setup.js
Object.defineProperty(window, 'import.meta', {
  value: {
    env: {
      APP_ENV: process.env.ENV?.toLowerCase() || 'prod'
    }
  }
});
  1. 在Jest配置文件(jest.config.js/jest.config.ts)中引入该文件:
// jest.config.js
module.exports = {
  // 其他已有配置...
  setupFilesAfterEnv: ['./jest.setup.js']
};

测试运行前,import.meta.env.APP_ENV会被自动设置为对应值,和Vite中的逻辑保持一致。

方案2:用Babel插件处理import.meta.env替换

如果项目使用Babel,可借助插件让Jest运行时处理环境变量替换:

  1. 安装依赖:
npm install babel-plugin-transform-vite-meta-env --save-dev
  1. 在babel.config.js中配置插件:
// babel.config.js
module.exports = {
  presets: [/* 你的现有presets */],
  plugins: [
    ['transform-vite-meta-env', {
      env: {
        APP_ENV: process.env.ENV?.toLowerCase() || 'prod'
      }
    }]
  ]
};

方案3:单个测试文件临时赋值

如果仅个别测试需要,可在测试文件顶部直接设置:

// 目标测试文件
beforeAll(() => {
  Object.defineProperty(window, 'import.meta', {
    value: {
      env: {
        APP_ENV: 'local' // 或 process.env.ENV?.toLowerCase() || 'prod'
      }
    }
  });
});

test('组件渲染正常', () => {
  // 测试逻辑
});

验证

完成配置后重新运行Jest测试,import.meta.env.APP_ENV将能正确获取到设置的值,不再返回undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:46:01