Проверка нескольких полей ввода с 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 тестовое задание.

Другие вопросы по тегам