2017-12-28 49 views
0

Wie kann ich "Änderungen erkennen" beim Testen von Angular ohne Testbed?Angular async erkennt Änderungen

Mit einer Komponente, ich werde diese:

it('should work', async(() => { 
    const fixture = TestBed.createComponent(TestComponent); 
    // do some async call 
    fixture.detectChanges(); // <=== This is what I want 
    expect(something).toEqual(somethingElse); 
}); 

Mit einem Service, habe ich nicht immer ein Testbed. Wie man angular erklärt, um zu warten, bevor er behauptet? Beispiel:

it('should work', async(() => { 
    const service = new MyService(); 
    const sub = service.emitter$.subscribe((val) => { 
    // expect(val).toEqual(otherVal); 
    }); 
    service.doAsyncWork(); 
}); 

Wie werden diese verbunden? Was passiert, wenn ich zwei Phasen überprüfen muss (z. B. einmal vor dieser asynchronen Arbeit, einmal danach, aber alle nach einer anfänglichen Periode)?

Antwort

1

Verwenden Sie fakeAsync mit der tick-Funktion, um den Zeitraum zu simulieren.

it('should work', fakeAsync(() => { 
    const fixture = TestBed.createComponent(TestComponent); 
    // do some async call 
    tick(10000);  
    expect(something).toEqual(somethingElse); 
}); 
+0

Das ist eine vorübergehende Lösung, in einigen Fällen bin ich auf Dinge angewiesen, die sich außerhalb meiner Kontrolle für diese eingehenden Daten befinden. Trotzdem danke. – Zlatko

Verwandte Themen