test () в Yup возвращает ошибку, даже значения не равны

Я делаю схему проверки пароля, и у меня есть следующие

const ProfileEditSchema = t =>
    Yup.object().shape({
       
        password: Yup.string()
            .notRequired(t('TR_PASSWORD_REQUIRED'))
            .matches(
                /^(?=.*[A-Za-z])(?=.*\d)[0-9a-zA-Z!@#$%-.()_']{8,}$/,
                t('TR_PASSWORD_HELPER')
            ),
        new_password: Yup.string().when('password', {
            is: password => password != undefined,
            then: Yup.string()
                .required(t('TR_PASSWORD_REQUIRED'))
                .matches(
                    /^(?=.*[A-Za-z])(?=.*\d)[0-9a-zA-Z!@#$%-.()_']{8,}$/,
                    t('TR_PASSWORD_HELPER')
                )
                .test(
                    'password-not-equal',
                    'new and old password are the same',
                    (password, new_password) => password === new_password
                )
        })

});

Все работает нормально, за исключением моей тестовой функции, которая всякий раз, когда я устанавливаю новое значение пароля, продолжает выдавать сообщение об ошибке проверки = ›« новый и старый пароль одинаковы », даже если я установил разные пароли. Также был бы признателен, если бы вы могли сказать, является ли использование .test() в этом случае лучшим подходом. Все, что я хочу, это выдать ошибку, если два входных значения равны. Спасибо!


person pepinillo6969    schedule 15.07.2021    source источник


Ответы (1)


Обратите внимание, что вы не можете использовать значения других полей как new_password в .test (), а также решения, описанные как const {new_password} = this.parent, чтобы получить значения других полей внутри test, не сработали, потому что это вернуло undefined. Итак, согласно это я использовал в своем коде и заменил:

Вместо того:

.test('password-not-equal','new and old password are the same',
          (password, new_password) => password === new_password)

Я написал:

.when('password', (password, schema) => {
                    return schema.test({
                        test: new_password => new_password !== password,
                        message: 'Passwords must be different'
                    });
                })
person pepinillo6969    schedule 15.07.2021