私は大理石のテストで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 /エフェクトをエラー処理、約束、およびテストでどのように使用できますか?