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

NestJS单元测试中获取.env环境变量返回undefined问题求助

解决NestJS测试中.env变量读取为undefined的问题

核心原因

测试环境下,NestJS的ConfigModule不会自动加载根目录的.env文件,必须在测试模块里显式配置加载逻辑。

具体解决方案

1. 在测试模块中显式配置ConfigModule

在你的测试文件(比如app.controller.spec.ts)里,导入ConfigModule时明确指定加载.env文件:

import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      imports: [
        ConfigModule.forRoot({
          envFilePath: '.env', // 指定.env文件路径
          isGlobal: true, // 可选,让配置全局生效
        }),
      ],
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "ASD"', () => {
      expect(appController.getTestVar()).toBe('ASD');
    });
  });
});

2. 检查jest配置是否拦截了.env文件

打开jest.config.js,确保没有把.env加入忽略列表:

module.exports = {
  // ...其他配置
  modulePathIgnorePatterns: [], // 不要包含.env
  transformIgnorePatterns: [], // 不要包含.env
};

3. 确保依赖版本兼容

更新@nestjs/config到与当前NestJS版本兼容的最新版:

npm install @nestjs/config@latest

4. 移除手动安装的dotenv

ConfigModule已内置dotenv逻辑,手动安装的dotenv可能导致冲突,直接卸载:

npm uninstall dotenv

额外排查点

  • 确认.env文件在项目根目录,没有拼写错误(比如写成.env.test或.env.local)
  • 检查TEST_VAR=ASD行没有多余空格,格式完全正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:24:58