Как я могу правильно издеваться над методом .hasError ()? - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь настроить тест с жасмином, чтобы проверить, возвращает ли функция правильную строку, если в шаблоне существует определенная ошибка.

Форма использует угловые материалы и имеет минимальную длину 5. Он также имеет обязательный раздел, то есть форма не может быть пустой.

Я попытался написать для этого тест жасмина, выполнив следующее (путем насмешки над hasError):

Вот раздел шаблона с полем mat-form-field:

<mat-form-field>
  <input matInput placeholder="Zip Code" maxlength="5" minlength="5" [formControl]="zipCode" required>
  <mat-error *ngIf="zipCode.invalid">{{getErrorMessage()}}</mat-error>
</mat-form-field>

Вот функция в компоненте:

  getErrorMessage() {
    if (this.zipCode.hasError('required')) {
      return 'You must enter a value';
    } else if (this.zipCode.hasError('minlength')) {
      return 'Zip code must be 5 digits';
    } else {
      return '';
    }

Вот мои два теста:

  it('should return "You must enter a value" if hasError("required")', () =>{
    mockZipCode = jasmine.createSpyObj(['hasError']);
    mockZipCode.hasError('required');

    expect(component.getErrorMessage()).toBe('You must enter a value');

  });

  it('should return "Zip Code must be 5 digits" if hasError("minLength")', () =>{
    mockZipCode = jasmine.createSpyObj(['hasError']);
    mockZipCode.hasError('minlength');

    expect(component.getErrorMessage()).toBe('Zip code must be 5 digits');

  });

Первые тесты проходят так, как они ожидают 'Вы должны ввести значение'.

Однако второй тест завершается неудачно и утверждает, что «Вы должны ввести значение» - это то, что ожидается. Это не то, что я хотел бы проверить.

Вместо этого я знаю, что при выводе кода сам код должен содержать 5 цифр, когда я сам тестирую приложение. Но, похоже, что тест настроен неправильно, чтобы проверить это.

Как исправить второй тест, чтобы .getErrorMessage () правильно возвращал строку «Почтовый индекс должен состоять из 5 цифр»?

...