Я работаю над тестированием кода Angular и, похоже, что-то неправильно понимает обновления шаблонов. Что я пытаюсь заставить работать: я реализовал компонент, который представляет собой просто searchInput, который может быть очищен нажатием кнопки. [Шаблон ниже] Это отлично работает на практике, но я хочу написать для него тест.
<mat-form-field>
<mat-icon matPrefix>search</mat-icon>
<input #searchInput matInput (input)="onSearch(searchInput.value)"
[placeholder]="placeholder">
<button class="clear-search-button" mat-button *ngIf="searchInput.value" matSuffix mat-icon-button
(click)="searchInput.value=''; onSearch('')">
<mat-icon>close</mat-icon>
</button>
</mat-form-field>
Мой тест в настоящее время выглядит следующим образом [de = fixture.debugElement]:
beforeEach(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule, MatFormFieldModule, MatInputModule],
declarations: [SomeSearchComponent],
schemas: [NO_ERRORS_SCHEMA]
});
fixture = TestBed.createComponent(SomeSearchComponent);
component = fixture.componentInstance;
de = fixture.debugElement;
fixture.detectChanges();
});
it('should reset Input on button input', () => {
const input = de.query(By.css('input'));
expect(input).not.toBeNull();
input.value = 'someSearch';
fixture.detectChanges(); // Update view since now the input.value allows
the button to get added to DOM, since *ngIf-condition is now true.
const resetBtn = de.querySelector('button');
resetBtn.click();
fixture.detectChanges(); // Update view since now the input.value should be updated.
expect(input.value).toEqual('');
});
Моя проблема в том, что, как бы я ни пытался заполучить кнопку, она, похоже, не добавляется в DOM, так как я всегда получаю 'TypeError: Невозможно прочитать свойство' click 'of null' в строке resetBtn.click()
.
Есть ли фундаментальная проблема с моим пониманием тестирования шаблонов или есть какая-то глупая опечатка?