Ответ 1
Входные данные не имеют textContent, только значение. Так expect(field.textContent).toBe('someValue');
бесполезно. Это, вероятно, то, что не удалось. Второе ожидание должно пройти, хотя. Здесь полный тест.
@Component({
template: '<input type="text" [(ngModel)]="user.username"/>'
})
class TestComponent {
user = { username: 'peeskillet' };
}
describe('component: TestComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [FormsModule],
declarations: [ TestComponent ]
});
});
it('should be ok', async(() => {
let fixture = TestBed.createComponent(TestComponent);
fixture.detectChanges();
fixture.whenStable().then(() => {
let input = fixture.debugElement.query(By.css('input'));
let el = input.nativeElement;
expect(el.value).toBe('peeskillet');
el.value = 'someValue';
el.dispatchEvent(new Event('input'));
expect(fixture.componentInstance.user.username).toBe('someValue');
});
}));
});
Важной частью является первый fixture.whenStable()
. Существует некоторая асинхронная настройка с формами, которая происходит, поэтому нам нужно дождаться ее завершения после того, как мы fixture.detectChanges()
. Если вы используете fakeAsync()
вместо async()
, тогда вы просто fixture.detectChanges()
tick()
после fixture.detectChanges()
.