Тесты кармы случайным образом перезапускаются и «удваивают» iframe в Edge - PullRequest
0 голосов
/ 14 мая 2019

У меня есть набор тестов кармы / жасмина для моего приложения Angular 7.Все мои тесты проходят в Chrome и Firefox, но когда я запускаю их в Edge, он будет работать немного, а затем иногда будет случайным образом перезагружать страницу и запускаться заново, а иногда он снова загружает карму в iframe, таким образом, «удваивая»"it.

Вот как это выглядит

double karma tests

Однако, когда я нажимаю кнопку" Отладка ", открывается новая вкладкаи все тесты работают нормально, без сбоев.

success debug karma tests

И вот как выглядит мой вывод на консоль.Вы можете видеть, что он запускает несколько тестов, а затем просто перезапускает их

enter image description here


Что здесь происходит?

Почемубудет ли он так себя вести в Edge, если нет ошибок при тестировании?

1 Ответ

0 голосов
/ 15 мая 2019

Я понял, что случилось, и это оказалось проблемой навигации.

У меня был компонент с 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();
});
...