网站搜索

javascript - Nest.js ConfigService 在端到端测试中不工作(配置验证错误)


我的 .env 文件包含 NODE_ENV=development 变量,但我收到以下错误:

● 测试套件运行失败

Config validation error: "NODE_ENV" must be one of [development, production]

  11 |   imports: [
  12 |     DatabaseModule,
> 13 |     ConfigModule.forRoot({
     |                  ^
  14 |       isGlobal: true,
  15 |       validationSchema,
  16 |       validationOptions: {

  at Function.forRoot (../node_modules/@nestjs/config/dist/config.module.js:75:23)
  at Object.<anonymous> (../src/app.module.ts:13:18)
  at Object.<anonymous> (app.e2e-spec.ts:4:1)

我的测试:

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    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);
  });
});

我的验证文件:

export default Joi.object({
  NODE_ENV: Joi.string()
    .valid('development', 'production')
    .default('development'),
  ...
});

我的 app.module:

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      validationSchema,
      validationOptions: {
        allowUnknown: true,
        abortEarly: false,
      },
    }),
    ...
  ],

当我运行 nest start:dev 时,一切运行顺利,单元测试也正常运行

答案#1

Jest 使用 NODE_ENV=test 运行测试,所以它就像你的应用程序的一个不同实例。要解决你的问题,请在你的验证模式中将 test 添加为有效的 NODE_ENV 值。