Nestjs配置验证错误:在测试中,甚至在代码中设置了process.env



App.module.ts:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import * as Joi from 'joi';
@Module({
imports: [
ConfigModule.forRoot({
validationSchema: Joi.object({
SOME_ENV_VARIABLE: Joi.string().required(),
}),
isGlobal: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

app.e2e-spec.ts:

import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';
describe('AppController (e2e)', () => {
let app: INestApplication;
beforeEach(async () => {
process.env.SOME_ENV_VARIABLE = 'kuku';
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
it('/ (GET)', () => {
return request(app.getHttpServer()).get('/').expect(200).expect('kuku');
});
});

如果我定期运行此测试,则测试失败:

npm run test:e2e

出现以下错误:Config validation error: "SOME_ENV_VARIABLE" is required

但是如果我用env 运行测试

export SOME_ENV_VARIABLE=kuku && npm run test:e2e

测试通过

我不明白为什么

process.env.SOME_ENV_VARIABLE = 'kuku';

如果我在没有validationSchema的情况下运行测试,它在两种情况下都可以正常工作

正如@moti所提到的,validate方法在导入时运行。因此,针对多种不同场景测试它的唯一方法是在测试过程中要求它处于飞行状态:

代替:

import { AppModule } from "../src/app.module";

Do:

beforeEach(() => {
process.env.SOME_ENV_VARIABLE = 'kuku';
jest.resetAllMocks();
jest.requireActual("../src/app.module");
});

这样,它将使用重写的环境变量运行

最新更新