【发布时间】:2017-11-12 01:29:09
【问题描述】:
我正在使用 ngrx/effects 进行弹珠测试。我有一项使用承诺的服务。我希望我的效果调用服务并处理成功和错误状态。我有这样的代码
效果:
.mergeMap(() =>
this.service.getThings()
.map((things) => new SetThingsAction(things))
.catch((error) =>
of(new HandleAPIErrorAction(error))
)
)
.catch((error) =>
of(new HandleAPIErrorAction(error))
);
服务:
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,Promises 似乎不适用于弹珠测试。 This SO question 给出了错误处理的想法,但似乎无法测试,因为它有一个 Promise。
如何使用 ngrx/effects 进行错误处理、承诺和测试。
【问题讨论】:
标签: ngrx-effects