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

Nestjs 布尔查询参数被视为字符串,不转换为布尔数据类型,nestjs,supertest,Nestjs,Supertest,当传递查询参数({count:false})时,我遇到了supertest问题,因为没有执行dto验证,NestJS将其视为字符串。 测试是 dto是 export class CollectionQueryDto { @IsOptional() @IsNotEmpty() afterId: any; @IsOptional() @IsOptional() @Transform((count, obj, type) => obj.count.toLowe

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

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);
  }
}


任何帮助都将不胜感激。

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

您也可以显示您的测试设置吗?也就是说,
beforeach/beforeAll
在哪里设置
app
进行测试?我已经在上面添加了它。感谢您对此进行研究。最后一个问题,验证管道如何绑定到服务器?是基于路由还是全局绑定?全局绑定。非常感谢。现在我明白了为什么转换没有发生,所以我想知道在启用全局验证的情况下e2e测试是如何完成的。太棒了,这很有效。非常感谢您的回答并帮助我思考整个过程
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(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',
      );
    });

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