布尔查询参数被视为字符串而不是转换为布尔数据类型

Boolean query params are treated as strings and not transformed to boolean datatype

当传递查询参数 ({count: false}) 时,我 运行 遇到 supertest 问题 NestJS 将其视为字符串,因为未执行 dto 验证。 测试是

      it.only('should NOT return count if count is turned off', async done => {
    const result = await request(app.getHttpServer())
      .get('/setting/')
      .set('Content-Type', 'application/json')          
      .query({count:false})
      .expect(200)
    done();
  });

dto 是

export class CollectionQueryDto {

  @IsOptional()
  @IsNotEmpty()
  afterId: any;

  @IsOptional()
  @IsOptional()
  @Transform((count, obj, type) =>
    obj.count.toLowerCase() === 'true' ? true : false,
  )
  count: boolean;

  constructor(partial: Partial<CollectionQueryDto> = {}) {
    Object.assign(this, partial);
  }
}

beforeAll设置如下

    beforeAll(async () => {
      const moduleFixture: TestingModule = await Test.createTestingModule({
        imports: [
          SettingModule,
          SortationOrmModule,
          ConfigModule,
          GlobalOrmModule,
        ],
        providers: [SettingService, ConfigService],
      }).compile();
      app = moduleFixture.createNestApplication();
      service = moduleFixture.get<SettingService>(SettingService);
      await app.init();
      const rowsAffected = await loadConfigurationData(
        'TST.loadConfigurationData',
      );
    });

Main.ts 有验证管道

  app.useGlobalPipes(
    new ValidationPipe({
      transform: true,
      forbidUnknownValues: true,
      transformOptions: {
        enableImplicitConversion: true,
      },
      exceptionFactory: errors => new ClassValidationException(errors),
    }),
  );

如有任何帮助,我们将不胜感激。

在您的设置中,您可以像在 main.ts 中一样添加 app.useGlobalPipes(new ValidationPipe()),以便为您的 e2e 测试添加管道 运行。您也可以对拦截器、过滤器和守卫执行相同的操作。