Saltar al contenido

Prueba unitaria RxJS Observable.timer usando mecanografiado, karma y jazmín

Solución:

Debe inyectar TestScheduler en el método del temporizador dentro de una parte beforeEach:

beforeEach(function() {
  this.scheduler = new TestScheduler();
  this.scheduler.maxFrames = 5000; // Define the max timespan of the scheduler
  const originalTimer = Observable.timer;
  spyOn(Observable, 'timer').and.callFake(function(initialDelay, dueTime) {  
    return originalTimer.call(this, initialDelay, dueTime, this.scheduler);
  });
});

Después de eso, tienes el control total del tiempo con scheduleAbsolute:

this.scheduler.schedule(() => {
  // should have been called once
  // You can put your test code here
}, 1999, null);

this.scheduler.schedule(() => {
  // should have been called twice
  // You can put your test code here
}, 2000, null);

this.scheduler.schedule(() => {
  // should have been called three times
  // You can put your test code here
}, 4000, null);

this.scheduler.flush();

Necesitas scheduler.flush() para iniciar TestScheduler.

editar: entonces, si solo desea probarlo X veces, use las funciones de programación con la frecuencia (y con los tiempos absolutos correctos en milisegundos) como desee.

edit2: agregué el inicio del programador que faltaba

edit3: lo cambié, así que debería estar trabajando con RxJs5

edit4: Agregar maxFrames ya que el valor predeterminado es 750ms y evitará probar secuencias de ejecución más prolongada.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *