Я понял, что случилось, и это оказалось проблемой навигации.
У меня был компонент с href="#"
в шаблоне, подобный этому: <a href="#" (click)="doSomething($event)">
, а затем обработанный так:
doSomething($event: Event): void {
$event.preventDefault();
someService.whatever();
}
в моем тесте у меня было что-то вроде
it('should call the doSomething() method when a link is clicked', () => {
spyOn(component, 'doSomething');
const link: HTMLAnchorElement = debugEl.query(By.css('a')).nativeElement;
link.click();
fixture.detectChanges();
expect(component.doSomething).toHaveBeenCalled();
});
но это заставило Edge (а не другие браузеры по какой-то причине) попытаться перейти к #
, что привело к перезагрузке тестов. Решением было просто добавить .and.callThrough()
, чтобы компонент мог просто запустить $event.preventDefault()
для предотвращения навигации в тестах.
Итак, приведенный выше тест теперь выглядит так
it('should call the doSomething() method when a link is clicked', () => {
spyOn(component, 'doSomething').and.callThrough(); //call through to run preventDefault() on the click event
const link: HTMLAnchorElement = debugEl.query(By.css('a')).nativeElement;
link.click();
fixture.detectChanges();
expect(component.doSomething).toHaveBeenCalled();
});