У меня есть довольно типичный простой компонент 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;
});
}));