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 值。