Estoy tratando de validar un objeto anidado condicionalmente en función de un valor en el padre.
const schema = Joi.object({ a: Joi.string(), b: Joi.object({ c: Joi.when(Joi.ref('..a'), { is: 'foo', then: Joi.number().valid(1), otherwise: Joi.number().valid(2) }), }), }); const obj = { a: 'foo', b: { c: 2, }, };En este ejemplo, quiero obtener un error de que c debe ser 1, pero pasa la validación. Lo he intentado con y sin referencias, pero claramente debo estar malinterpretando algo fundamental sobre cómo funciona Joi. ¿Alguna ayuda?
necesitas uno más . en su llamada Joi.ref() . .. subirá al árbol principal, luego otro punto para indicar la propiedad. Entonces, para su caso, iría al padre .. luego obtendría una propiedad parent.a
Usando el patio de recreo de Joi esto funcionó para mí:
Joi.object({ a: Joi.string(), b: Joi.object({ c: Joi.when(Joi.ref('...a'), {is: 'foo', then: Joi.number().valid(1), otherwise: Joi.number().valid(2)}) }) })