Тестирование компонентов Angular2, которые используют setInterval или setTimeout

У меня есть довольно типичный, простой компонент ng2, который вызывает сервис для получения некоторых данных (элементы карусели). Он также использует setInterval для автоматического переключения слайдов карусели в пользовательском интерфейсе каждые n секунд. Это работает просто отлично, но при запуске тестов Jasmine я получаю сообщение об ошибке: «Невозможно использовать setInterval из асинхронной тестовой зоны».

Я попытался обернуть вызов setInterval в this.zone.runOutsideAngular (() => {...}), но ошибка осталась. Я бы подумал, что изменение теста для запуска в зоне fakeAsync решит проблему, но тогда я получаю сообщение об ошибке, в котором говорится, что вызовы XHR не разрешены из зоны тестирования fakeAsync (что имеет смысл).

Как я могу использовать как вызовы XHR, сделанные службой, так и интервал, все еще имея возможность протестировать компонент? Я использую ng2 rc4, проект, созданный angular-cli. Спасибо заранее.

Мой код из компонента:

constructor(private carouselService: CarouselService) {
}

ngOnInit() {
    this.carouselService.getItems().subscribe(items => { 
        this.items = items; 
    });
    this.interval = setInterval(() => { 
        this.forward();
    }, this.intervalMs);
}

И из спецификации Жасмин:

it('should display carousel items', async(() => {
    testComponentBuilder
        .overrideProviders(CarouselComponent, [provide(CarouselService, { useClass: CarouselServiceMock })])
        .createAsync(CarouselComponent).then((fixture: ComponentFixture<CarouselComponent>) => {
            fixture.detectChanges();
            let compiled = fixture.debugElement.nativeElement;
            // some expectations here;
    });
}));

Ответы на вопрос(3)

Ваш ответ на вопрос