NestJS:单元测试 Joi 验证

问题描述

我是 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 {}

参考:https://docs.nestjs.com/techniques/configuration