J'ai un composant Angular qui utilise ngrx
ActionsSubject
pour écouter les actions envoyées. Comment puis-je écrire un test qui peut vérifier cet abonnement de ActionsSubject
?
Le composant se présente comme suit :
export class TestComponent {
constructor(public actionsSubject: ActionsSubject) { }
public isUpdated = false;
public ngOnInit() {
this.actionSubscription = this.actionsSubject.subscribe(action => {
if (action.type === "Update") {
this.isUpdated = true; <----- I want to test this condition
}
});
}
}
Actuellement, j'envoie l'action de mise à jour manuellement :
it('isUpdated should be true, when update action dispatched', () => {
component.store.dispatch(new UpdateAction());
expect(component.isUpdated).toEqual(true);
});
Cela fonctionne, mais je veux simuler cet abonnement au lieu d'appeler l'action manuellement.
Par exemple :
it('isUpdated should be true, when update action dispatched', () => {
let actionSubject = TestBed.get(ActionsSubject);
const action = {
type: 'Update'
};
actionSubject = of({ action });
component.ngOnInit();
fixture.detectChanges()
expect(component.isUpdated).toEqual(true);
});
La combinaison d'essai ressemble à ceci
const action = { type: FlowActionTypes.UpdateStep };
const actionSub: ActionsSubject = new ActionsSubject({ action }); <-- TS not accepting
providers: [ { provide: ActionsSubject, useValue: actionSub } <-- here I am passing as you told ]
Mais il ne déclenche jamais l'abonnement dans le composant. Comment puis-je le tester efficacement ?