Проверка нескольких полей ввода с Yup
В настоящее время я использую Formik и проверяю с помощью Yup.
Я хочу проверить 2 даты, дату начала и дату окончания.
Сначала это было довольно просто, у меня было два поля ввода, start_date
а также end_date
, Оба из них были просто текстовыми вводами, которые приняли следующий формат, MM-YYYY
, Проверка достаточно хороша, она сначала превращает эту строку в дату, используя moment(value, "MM-YYYY")
,
Отсюда у нас были следующие тесты:
start_date: Yup.string()
.test(
'test1',
'Format must be MM-YYYY',
function (value){
return moment(value, "MM-YYYY", true).isValid()
}
)
.test(
'test2',
'Start date must be before end date',
function(value){
let { end_date } = this.parent;
return moment(value, "MM-YYYY").isBefore(moment(end_date, "MM-YYYY"))
}
)
test1
просто проверяет, что MM-YYYY
является действительной датой test2
проверяет, что start_date
до end_date
, Для простоты end_date
тесты такие же, за исключением того, что есть дополнительный тест. Дополнительный тест проверяет, что end_date
равно или меньше текущей даты.
Это то, что у меня сейчас есть, но я хочу 4 поля ввода:
start_date_month
(01, 02, 03...)start_date_year
(2000, 2001...)end_date_month
end_date_year
Это легко сделать, но тесты будут работать немного иначе, я не уверен, что мы сможем протестировать start_date_month
а также start_date_year
все вместе. По сути, мне нужно объединить их с -
создавать MM-YYYY
снова.
Есть идеи, как это сделать с Yup?
1 ответ
Очень недолгая проблема. Кажется, вы можете просто передать другие входные данные, такие как: let {start_date_year} = this.parent
в start_date_month
тестовое задание.