Что вы можете сделать, это использовать dispatchEvent следующим образом:
it('simple input test', fakeAsync(() => {
const fundChangedSpy = spyOn(component, 'fundPortIdChanged').and.callThrough();
const portIDInput: HTMLInputElement = fixture.debugElement.nativeElement.querySelector('#portId');
expect(portIDInput.value).toEqual('');
portIDInput.dispatchEvent(new Event('keyup'));
fixture.detectChanges();
tick(50);
expect(portIDInput.value).toEqual('fund1');
expect(fundChangedSpy).toHaveBeenCalledTimes(1);
}));
Однако, насколько я понимаю, более рекомендуется использовать Реактивные формы вместо Формы на основе шаблонов с модульным тестированием.
Реактивные формы также обеспечивают прямой путь к тестированию, потому что вы уверены, что ваши данные непротиворечивы и предсказуемы при запросе.Любые потребители потоков имеют доступ для безопасного управления этими данными.
Вот stackblitz с тестом.