Я пытаюсь написать пользовательский тест для библиотеки проверки yup для использования в приложении узла / express, которое проверяет, совпадают ли два поля - пример использования, например, проверка соответствия полей пароля и подтверждения пароля. Лог c работает, однако сообщение, предоставленное методом, не является.
Пользовательский код проверки изменен с: https://github.com/jquense/yup/issues/97#issuecomment -306547261
Пользовательский валидатор
yup.addMethod(yup.string, 'isMatch', function (ref, msg) {
return this.test({
name: 'isMatch',
message: msg || `${this.path} must be equal to ${this.reference}`,
params: {
reference: ref.path
},
test: function (value) {
return value === this.resolve(ref);
}
});
});
Пример использования
const schema = yup.object().shape({
password: yup.string().min(8),
passwordConfirm: yup.string().isMatch(yup.ref('password'))
})
const payload = {
password: 'correctPassword',
passwordConfirm: 'incorrectPassword'
}
schema.validate(payload)
Вышеуказанный метод работает, как и ожидалось, с точки зрения логики c. Однако в возвращенном сообщении об ошибке значения this.path
и this.reference
равны undefined
(то есть undefined must be equal to undefined
). Он должен читать passwordConfirm must be equal to password
.
Я должен был добавить this.
перед path
и reference
, в противном случае происходит сбой узла с ReferenceError, что path/reference is not defined
.