Nest.js E2E测试中ConfigService失效:配置验证错误
解决NestJS E2E测试中NODE_ENV配置验证错误
问题原因
E2E测试运行时默认会将NODE_ENV设置为test,但你的Joi验证规则仅允许development和production两个值,导致配置验证失败。而nest start:dev和单元测试时NODE_ENV为development,符合验证规则,因此能正常运行。
解决方案
方案1:在验证规则中添加test环境
修改你的验证文件,将test加入NODE_ENV的可选值列表:
export default Joi.object({ NODE_ENV: Joi.string() .valid('development', 'production', 'test') // 新增test选项 .default('development'), // 其他配置项... });
方案2:强制E2E测试使用development环境
如果不想新增test环境,可以通过以下两种方式调整:
方式A:在测试代码中手动设置环境变量
describe('AppController (e2e)', () => { let app: INestApplication; beforeEach(async () => { // 手动指定NODE_ENV为development process.env.NODE_ENV = 'development'; const moduleFixture: TestingModule = await Test.createTestingModule({ imports: [AppModule], }).compile(); app = moduleFixture.createNestApplication(); await app.init(); }); it('/user (GET)', () => { return request(app.getHttpServer()).post('/user').expect(200); }); });
方式B:指定测试时加载的.env文件
调整app.module.ts中ConfigModule的配置,根据环境加载对应文件:
@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, validationSchema, validationOptions: { allowUnknown: true, abortEarly: false, }, // 根据NODE_ENV加载对应env文件 envFilePath: `.env.${process.env.NODE_ENV || 'development'}`, }), // 其他模块... ], })
然后创建.env.test文件并设置NODE_ENV=test(需同步更新验证规则),或者直接在测试命令中指定加载.env:
// package.json中的e2e命令 "scripts": { "e2e": "jest --config ./test/jest-e2e.json --env-file .env" }
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

