2 réponses

Meilleure réponse

Que voulez-vous tester exactement?

Si vous souhaitez simplement que votre rappel d'abonnement soit appelé avant la fin de votre test, vous pouvez utiliser la méthode tick() dans votre test (https://angular.io/api/core/testing/tick):

it('should dispatch if members are provided / selected', fakeAsync(() => {
  // arrange
  const dispatchSpy = spyOn(component.store, 'dispatch');
  const membersToEmit = ['member-1', 'member-2'];
  component.selectedMembers$ = of(membersToEmit) // of from 'rxjs';

  // act
  component.ngOnInit();
  // alternatively you could call:
  // fixture.detectChanges();

  tick();  // causes your Observable to emit, so that the subscribe callback gets called 

  // assert
  expect(dispatchSpy).toHaveBeenCalled();
}));
1
gokumc 27 août 2020 à 11:42

Par exemple cette partie:

this.selectedMembers$.subscribe((members) => {
    if (!!members) {
        this.store.dispatch(actions.getPCPs());
    }
});

Dans votre test:

const spy = spyOn(store, 'dispatch');
component.selectedMembers$.next('abc');
expect(spy).toHaveBeenCalledWith('abc');

Demandez-vous quelque chose comme ça?

0
Klaudijus Valintėlis 27 août 2020 à 10:04