Prueba de componentes Angular2 que usan setInterval o setTimeout

Tengo un componente ng2 bastante típico y simple que llama a un servicio para obtener algunos datos (elementos de carrusel). También usa setInterval para cambiar automáticamente las diapositivas del carrusel en la interfaz de usuario cada n segundos. Funciona bien, pero cuando ejecuto las pruebas de Jasmine obtengo el error: "No se puede usar setInterval desde una zona de prueba asíncrona".

Intenté ajustar la llamada setInterval en this.zone.runOutsideAngular (() => {...}), pero el error permaneció. Pensé que cambiar la prueba para que se ejecute en la zona fakeAsync resolvería el problema, pero luego recibo un error que dice que las llamadas XHR no están permitidas dentro de la zona de prueba fakeAsync (lo cual tiene sentido).

¿Cómo puedo usar las llamadas XHR realizadas por el servicio y el intervalo, sin dejar de probar el componente? Estoy usando ng2 rc4, proyecto generado por angular-cli. Muchas gracias de antemano.

Mi código del componente:

constructor(private carouselService: CarouselService) {
}

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

Y de la especificación Jasmine:

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;
    });
}));

Respuestas a la pregunta(3)

Su respuesta a la pregunta