angular - Cum să testezi unitar un IntervalObservable


În aplicația mea Angular, folosesc un IntervalObservable pentru a efectua periodic anumite acțiuni (în cazul meu, la fiecare 5 minute):

IntervalObservable.create(300000) // 5 minutes
  .subscribe(() => {
    this.someMethodReturningObs().subscribe((data) => {
      this.myData = data;
    });
  });

cum pot să îl testez unit?

Răspuns #1

Actualizare:

Pentru a verifica this.myData la fiecare 5 minute.

it("should test data for 5min interval", fakeAsync(() => { 
tick(300000);
expect(myData).toBe(testValue);
}))

Vechea răspuns

Jasmine.clock poate fi folosit pentru scopurile tale. Verifică exemplul de mai jos din documentație

beforeEach(function() {
    timerCallback = jasmine.createSpy("timerCallback");
    jasmine.clock().install();
  });

Asigură-te că dezinstalezi ceasul după ce ai terminat pentru a restaura funcțiile originale ale temporizatorului.

afterEach(function() {
    jasmine.clock().uninstall();
  });

Apelurile către orice callback înregistrat sunt declanșate atunci când ceasul este avansat prin funcția jasmine.clock().tick, care ia un număr de milisecunde.

it("causes a timeout to be called synchronously", function() {
    setTimeout(function() {
      timerCallback();
    }, 100);

    expect(timerCallback).not.toHaveBeenCalled();

    jasmine.clock().tick(300000);

    expect(timerCallback).toHaveBeenCalled();
  });