У меня есть очень простая угловая шаблонная форма с одним обязательным полем.Сообщение о проверке отображается, если поле недопустимо, что является случаем, когда компонент сначала загружается, поскольку поле является обязательным, но пустым.Код выполняется, как и ожидалось, при просмотре в приложении и выводится сообщение проверки.
При тестировании компонента с помощью модульного теста Жасмин сообщение проверки не принимается, и тест завершается неудачей.
Я уверен, что логика для поиска сообщения проверки правильности работает, потому что если я удаляю директиву * ngIf в сообщении DIV, то тест проходит успешно.
Я попробовал следующее:
- импорт BrowserModule в спецификацию теста
- запуск теста в блоке fakeAsync ()
Шаблон:
<form #form="ngForm">
<label>First name:</label>
<input #firstName="ngModel"
type="text"
name="firstName"
[(ngModel)]="firstNameText"
required />
<div class="validation-error" *ngIf="firstName.invalid">
Please enter a valid first name
</div>
</form>
Класс компонента:
import { Component } from '@angular/core';
@Component({
selector: 'app-person-form',
templateUrl: './person-form.component.html'
})
export class PersonFormComponent {
public firstNameText: string;
}
Спецификация теста на жасмин:
import { ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing';
import { PersonFormComponent } from './person-form.component';
import { FormsModule } from '@angular/forms';
import { DebugElement } from '@angular/core';
import { By } from '@angular/platform-browser';
describe('PersonFormComponent', () => {
let fixture: ComponentFixture<PersonFormComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ FormsModule ],
declarations: [ PersonFormComponent ]
});
fixture = TestBed.createComponent(PersonFormComponent);
fixture.detectChanges();
});
it('should show a validation error if the first name was touched but left empty', () => {
let firstNameValidationError: DebugElement;
// try to get a handle to the validation message (should exist as form is invalid):
firstNameValidationError = fixture.debugElement.query(By.css('.validation-error'));
// the validation error should be found:
expect(firstNameValidationError).toBeTruthy();
});
});