问题描述
我是 Node 和 nest 框架的新手,在测试导入使用 Joi 验证环境变量的自定义配置模块的模块时遇到问题:
yarn test
Test suite Failed to run
Config validation error: "APP_PORT" is required
app-config.module.ts
@Module({
imports: [
ConfigModule.forRoot({
expandVariables: true,load: [configuration],validationSchema: Joi.object({
APP_PORT: Joi.number().required()
}),}),],providers: [AppConfigService],exports: [AppConfigService],})
export class AppConfigModule { }
app.config.ts
import { registeras } from '@nestjs/config';
export default registeras('app',() => ({
env: process.env.NODE_ENV,port: process.env.APP_PORT || 3000
...
}));
invoice.service.spec.ts
describe('InvoiceService',() => {
let service: InvoiceService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
ConfigModule.forRoot({
load: [configuration],ignoreEnvFile: true,AppConfigModule
],providers: [
InvoiceService,....
],}).compile();
service = module.get<InvoiceService>(InvoiceService);
});
it('should be defined',() => {
expect(service).tobedefined();
});
});
我使用 env 文件在本地部署,我只在测试类中设置了 ignoreEnvFile: true
,因为 env 文件从 github repo 中被忽略,并且项目集成了运行单元测试的 github 操作。
解决这个问题的最佳方法是什么?我不想将 env 文件添加到 repo。 存在任何禁用/伪造/模拟 Joi 验证方法的方法。我看到了一些使用 setupFiles 的示例,但我不确定这是否是一个好的做法。
解决方法
能否请您出示 package.json 文件?
您必须已安装 npm i --save @nestjs/config
然后在根目录中创建 .env
文件。此外,您应该将其导入您的应用模块。
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: ".development.env",}),],})
export class AppModule {}