Puede darse el caso de que halles algún fallo con tu código o trabajo, recuerda probar siempre en un entorno de testing antes añadir el código al trabajo final.
Solución:
Al usar Yup, si todas las funciones normales fallan, puede usar el .test
característica, documentada aquí – https://github.com/jquense/yup#mixedtestname-string-mensaje-string–función-prueba-esquema-de-función
mixed.nombre de la prueba: stringmensaje: string | función, prueba: función): Esquema
Agrega una función de prueba a la cadena de validación. Las pruebas se ejecutan después de lanzar cualquier objeto. Muchos tipos tienen algunas pruebas integradas, pero puede crearlas fácilmente. Para permitir validaciones personalizadas asíncronas, todas las pruebas (o ninguna) se ejecutan de forma asíncrona. Una consecuencia de esto es que no se puede garantizar el orden de ejecución de las pruebas.
Para su implementación, querrá escribir una “prueba” para cada uno de sus 4 campos para asegurarse de que uno de los 4 no esté null.
field1: yup
.string()
.test(
'oneOfRequired',
'One of Field1, Field2, Field3 or Field4 must be entered',
function(item)
),
field2: yup
.string()
.test(
'oneOfRequired',
'One of Field1, Field2, Field3 or Field4 must be entered',
function(item) this.parent.field4)
),
etc…
Tenga en cuenta que en este caso no he usado una función de flecha. Esto se debe a que para usar el contexto ‘este’ debe usar esta sintaxis, esto se menciona en la documentación de Yup.
Existe otra posibilidad si no desea agregar la validación a cada campo, sino tener un controlador de errores “global” para estas cosas.
Harías algo como esto:
const schema = yup.object().shape(
field1: yup.string().required(),
field2: yup.string().required(),
field3: yup.string().required(),
field4: yup.string().required(),
).test('yourTestCondition', function (value)
// your global test code...
)
Hay una solución para lo que estás buscando. En lugar de escribir una prueba para cada uno de los elementos, podría escribir una para el padre. Simulando un error global.
yup.object(
field1: yup.string(),
field2: yup.string(),
field3: yup.string(),
field4: yup.string(),
)
.test('global-ok',
'you do not fulfill the requirements',
function (value)
return CONDITION OVER THE CHILDREN;
)
Por ejemplo, si no desea escribir el error para una serie de elementos obligatorios y solo proporciona un tipo de error global. Tú podrías:
yup.object(
username: yup.string().required(),
password: yup.string().required(),
email: yup.string().required().test(verify_email),
)
.test('global-ok',
'The data is not correct',
function (value)
return username && password && email;
)
Nos encantaría que puedieras dar recomendación a esta división si lograste el éxito.