Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

383
Views
¿Por qué la tubería de validación de NestJS falla en la prueba unitaria cuando falta el campo pero skipMissingProperties es verdadero?

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); } }
about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!