Tengo una tubería de validación personalizada en NestJS donde configuro skipMissingProperties en true , por lo que cuando no envío un campo que está decorado con IsDefined , la validación no generará una excepción. Por ejemplo, si el DTO es:
class ModelDTO { @IsDefined() @IsNumber() requiredNumber1: number; @IsDefined() @IsNumber() requiredNumber2: number; }y el objeto real que acepta la tubería de validación es:
{ requiredNumber2: 1 }no falla (guardo un registro en este caso).
Cuando realizo las pruebas de e2e, funciona bien: puedo ver que la tubería de validación continúa hasta el controlador y que obtengo el registro deseado.
Por alguna razón, cuando realizo pruebas unitarias, el mismo caso falla con la excepción Bad Request (400), el mensaje de error es requiredNumber2 should not be null or undefined .
¿Por qué falla la prueba unitaria mientras que el e2e funciona bien? (Por cierto, en las pruebas manuales, la tubería también funciona bien).
EDITAR: la tubería es:
class CustomValidationPipe extends ValidationPipe { const OPTIONS = { transform: true, skipMissingProperties: true, whitelist: true, forbidNonWhitelisted: false, forbidUnknownValues: true, transformOptions: { enableImplicitConversion: true, } } constructor() { super(OPTIONS); } async transform(value, metadata) { const objectToValidate = plainToClass( metadata.metatype, cloneDeep(value) ); const errors = await validate( objectToValidate, { ...OPTIONS, skipMissingProperties: false, forbidNonWhitelisted: true, } ) if (errors.length > 0) { // log } return super.transform(value, metadata); } }