Угловой юнит-тест с setTimeout - PullRequest
       6

Угловой юнит-тест с setTimeout

0 голосов
/ 05 сентября 2018

Мой компонент выглядит следующим образом, где в Init я получаю свои начальные данные от службы, а затем каждые 15 секунд вызываю одну и ту же функцию для обновления этих данных:

networkGraph: NetworkGraphComponent;
hideSpinner: boolean = false;
ngAfterViewInit() {
      this.getTopology();
}

getTopology() {
      clearTimeout(this.timeoutHandler);
      this.topologyService.getTopology().subscribe((topology: any) => {

            ...do stuff...

            if (topology) {

                setTimeout(()=>{ // hack to fix ngIf 
                    this.hideSpinner = true;
                });
                this.networkGraph.topology = topology;
                this.timeoutHandle = setTimeout(function(){
                    this.getTopology();
                }, 15000);
            }

    });

Как бы я написал модульный тест, чтобы проверить это? Он продолжает терпеть неудачу, говоря, что у меня есть таймеры в очереди. Я прочитал это https://medium.com/@golbie/angular-testing-async-stuff-in-the-fakedasync-zone-vs-providing-custom-schedulers-27a7f83c7774 и попытался выяснить, что там, но, полагаю, я сделал это неправильно, потому что у меня все еще были те же результаты.

 it('should create the component', fakeAsync(()=>{
    tick(20000)
    fixture.detectChanges();
    fixture.whenStable().then(()=>{
        expect(component).toBeTruthy();
    })

}));

1 Ответ

0 голосов
/ 29 сентября 2018

Вы пробовали использовать done ()?

it('should create the component', (done) => {

    fixture.detectChanges();
    fixture.whenStable().then(()=>{
        done(); //waits for promise to complete
        expect(component).toBeTruthy();
    })

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...