2017-11-11 7 views
0

私は大理石のテストでngrx/effectsを使用しています。私は約束を使うサービスを持っています。私は自分のエフェクトがサービスを呼び出し、成功した状態とエラー状態の両方を処理するようにしたい。 .mergeMap(() => this.service.getThings() .map((things) => new SetThingsAction(things)) .catch((error) => of(new HandleAPIErrorAction(error)) ) ) .catch((error) => of(new HandleAPIErrorAction(error)) ); ngrx/effects - 約束でテストする方法

サービス: public geThings() { return Observable.fromPromise(this.promiseBasedThing.getTheThings()); }

次にテスト: actions = hot("a", { a: new GetThingsAction() }); const response = cold("-#", {}); service.getThings.and.returnValue(response); const expected = cold("-b", { b: new HandleAPIErrorAction("error") }); expect(effects.getThings$).toBeObservable(expected);

これ、実際にすべての作品私はこの

効果のようなコードを持っています。しかし、効果の二重のキャッチは明らかに悪いと思われ、おそらくObservablesがどのように動作するのか分かりません。現実世界では、後のキャッチだけが効果的です。テストでは、最初のものが有効です。

thisに基づいて、約束は大理石のテストでは機能しないようです。 This SO questionはエラー処理についてのアイデアを示していますが、Promiseがあるためテストすることは不可能です。

ngrx /エフェクトをエラー処理、約束、およびテストでどのように使用できますか?

答えて

0

さらなる研究の後に自分自身に答えることができます。

https://jsfiddle.net/btroncone/upy6nr6n/

基本的に私はgetThingsではなく、実際に漁獲を行うために必要な。

getThings() { 
    return Observable.fromPromise(this.promiseBasedThing.getTheThings()) 
     .catch((error) => Observable.of(error)); 
    } 

はまた、それが代わりにすぎngrx /エフェクトを使用しながら、それを解決しようとするの簡単なrsjx例で、これらの問題を解決するためにはるかに簡単だということを学びました。これにはまだ2つのcatchステートメントがありますが、テストモッキングは現実の動作と一致します。

関連する問題