Вы почти у цели, но вам нужно будет дождаться обработки события click, прежде чем проверять, был ли вызван метод.
1) Самый прямой способ сделать это - вызвать detectChanges () для явной активации обнаружения изменений.
it('clicking on settings icon will trigger openModal method', () => {
spyOn(component, 'getImageById');
component.searchId = '1';
submit = fixture.debugElement.query(By.css('#getimagebyid')).nativeElement;
submit.click();
fixture.detectChanges();
expect(component.getImageById).toHaveBeenCalled();
});
2) В качестве альтернативы, вы можете использовать автоматическое обнаружение изменений в вашем файле .spec.
import { ComponentFixtureAutoDetect, . . . . } from '@angular/core/testing';
.
.
TestBed.configureTestingModule({
declarations: [ BannerComponent ],
providers: [
{ provide: ComponentFixtureAutoDetect, useValue: true }
]
});
3) Обработайте его с помощью функции async () для обработки события асинхронного нажатия кнопки.Затем следует вызов .whenStable()
, который возвращает обещание.
import { async, . . . . } from '@angular/core/testing';
.
.
it('clicking on settings icon will trigger openModal method', async(() => {
spyOn(component, 'getImageById');
component.searchId = '1';
submit = fixture.debugElement.query(By.css('#getimagebyid')).nativeElement;
submit.click();
fixture.whenStable().then(() => {
expect(component.getImageById).toHaveBeenCalled();
});
}));