Я пытаюсь настроить тест с жасмином, чтобы проверить, возвращает ли функция правильную строку, если в шаблоне существует определенная ошибка.
Форма использует угловые материалы и имеет минимальную длину 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 цифр»?