Угловой тест жасмина маршрутизатора-розетки

Я тестирую навигацию в веб-приложении с помощью спецификации Jasmine с RouterTestingModule, но у меня проблемы с вложенным fixture.whenStable().then(() => {}).

Например: я нажимаю на ссылку, затем на другую ссылку, а затем еще на одну ссылку, каждый раз, когда router-outlet меняет отображаемый компонент. Пока что это единственный способ, которым я решил протестировать (без тестов e2e), - это следовать приведенному ниже шаблону:

(component setup)
...
it('test name', async(() => {
 fixture.nativeElement.querySelector('.link').click();

 fixture.whenStable().then(() => {
   fixture.nativeElement.querySelector('.link2').click();

   fixture.whenStable().then(() => { 
     fixture.nativeElement.querySelector('.link3').click();

     fixture.whenStable().then(() => { 
        expect(fixture.nativeElement.querySelector('.element')).toBeTruthy();
     });
   });
 });
});

Но это немного безумный способ написания тестов. Я думаю попробовать fakeAsync с tick() и flush(), однако это не помогает, так как компонент не появляется (рендерится) вместо router-outlet.

Есть ли способ выполнить мой тест без вложенной структуры обещаний? Может ли fakeAsync помочь в моем случае?


person MeIr    schedule 15.06.2020    source источник


Ответы (1)


person    schedule
comment
Можете ли вы подробнее рассказать о fakeAsync? - person MeIr; 15.06.2020
comment
Насколько мне известно, fakeAsync позволяет имитировать течение времени в ngZone с использованием tick, в основном оно наблюдает за текущими асинхронными действиями и контролирует их течение времени. У вас может быть асинхронная функция в fakeAsync, если вы хотите использовать структуру ожидания для ожидания разрешения некоторых промисов, но если в них будет выдана какая-то асинхронная ошибка, она будет обнаружена областью fakeAsyc. - person Xesenix; 15.06.2020