2017-03-10 1 views
0

kehrt ich einen Effekt haben, die Aktion gibt A, dann B AktionWie teste ich eine Wirkung, die mehrere Aktionen

@Effect() myEffect$: Observable <Action> = this.actions$ 
    .ofType('MY_ACTION') 
    .switchMap(() => Observable.of(
    // subscribers will be notified 
    { type: 'ACTION_ONE' }, 
    // subscribers will be notified (again ...) 
    { type: 'ACTION_TWO' } 
)); 

Wie kann ich die zwei aufeinanderfolgenden zurück Aktionen testen?

it('should return action one then action two',() => { 
    runner.queue(new myAction()); 
    const expectedResult = twoSuccesiveActions; 
    sessionEffect.myEffect$.subscribe(result => { 
    // how do I test those two succesively returned actions 
    expect(result).toEqual(expectedResult); 
    }); 
}); 

Antwort

0

Sie könnten eine Verwendung mit take(1) und eines mit skip(1):

it('should return action one then action two',() => { 
    const expectedResult = twoSuccesiveActions; 
    sessionEffect.myEffect$.take(1).subscribe(result => { 
    // first action 
    expect(result).toEqual(expectedResult); 
    }); 

    sessionEffect.myEffect$.skip(1).take(1).subscribe(result => { 
    // second action 
    expect(result).toEqual(expectedResult); 
    }); 

    runner.queue(new myAction()); 
}); 

Auf jeden Fall würde ich Ihnen vorschlagen take(1) zu verwenden, wenn Sie nicht von Hand beende keine Lecks in anderen Tests, um sicherzustellen, ect ...

0

Verwendung paarweise wie folgt aus:

it('should return a ACTION_ONE && ACTION_TWO', 
    inject([EffectService, EffectsRunner], (service: EffectService, runner: EffectsRunner) => { 
    runner.queue({type: USER_SWITCH_ROLE}); 

    service.myEffect$ 
     .pairwise() 
     .subscribe(([result1, result2]) => { 
     expect(result1).toEqual({type: ACTION_ONE, payload: {}}); 
     expect(result2).toEqual({type: ACTION_TWO, payload: {}}); 
     }); 
    })); 
Verwandte Themen