Получение TypeError: control.get не является функцией в Angular Unit Testing - PullRequest
0 голосов
/ 18 марта 2020

Я пишу angular блок тестов для пароля и подтверждения пароля.

validation.ts file

export function matchPasswords(
passwordFieldName: string,
confirmPasswordFieldName: string
): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
const password = control.get(passwordFieldName).value;
const confirmPassword = control.get(confirmPasswordFieldName).value;
if (password !== confirmPassword) {
  control
    .get(confirmPasswordFieldName)
    .setErrors({ passwordsDoNotMatch: true });
  return { passwordsDoNotMatch: true };
} else {
  return null;
}
};
}

validation.spe c .ts code

it('should match both password fields and return null if both matches', () => {
  var passwordField1: string = "Admins@123";
  var confirmPasswordField1: string = "Admins@123";
  const validate = formValidators.matchPasswords(passwordField1, confirmPasswordField1);
   const validate = formValidators.matchPasswords(passwordField1, confirmPasswordField1);
   expect(
     validate({value:{
         'passwordFieldName':passwordField1,
         'confirmPasswordFieldName':confirmPasswordField1}} as AbstractControl)
       .toEqual(null));
 });

В строке control.get (passwordFieldName) .value я получаю сообщение об ошибке control.get не является функцией.

1 Ответ

0 голосов
/ 18 марта 2020

Вы захотите применить свой валидатор к группе FormGroup, которая предоставит вам доступ к необходимым элементам FormControls. В данный момент вы передаете AbstractControl / FormControl, который по сути является одним полем формы.

Функция может выглядеть примерно так:

export function matchPasswords: ValidatorFn = (fg: FormGroup) => {
  const password = fg.get('passwordFieldName').value;
  const confirmPassword = fg.get('confirmPasswordFieldName').value;
  return password === confirmPassword
    ? null
    : { passwordsDoNotMatch: true };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...