【发布时间】:2019-08-19 02:48:31
【问题描述】:
在我们的 Angular Web 应用中,我们有一些 NgRx 效果,它们使用来自我们商店不同部分的不同信息。为此,我们使用推荐的withLatestFrom-approach:
withLatestFrom(
this.store.pipe(select(...)),
this.store.pipe(select(...)),
...
)
虽然这种方法似乎在生产中运行良好,但对效果进行单元测试时感觉很糟糕。
对于我们的单元测试,我们目前正在使用 jasmine-marbles、jasmine spy-objects 和 ngrx MockStore (NgRx 7+)。困难的部分是提供必要的存储状态,以便选择器能够正常工作。
EXAMPLE-EFFECT,我们没有单元测试:
@Effect()
getStammdatenDetails$: Observable<Action> = this.actions$.pipe(
ofType(StammdatenItemDetailActionTypes.REQUEST_DETAILS),
withLatestFrom(
this.store.pipe(select(fromRoot.getMetadata)),
this.store.pipe(select(fromRoot.getCustomerId)),
this.store.pipe(select(fromRoot.getRouterParams))
),
mergeMap(([action, metadata, customerId, params]) => {
*effect logic*
})
);
也许这里有人可以提供更多见解或指向我们缺少的文档的有用链接?
如果有方便的方法来对此类效果进行单元测试,或者如何将这些效果重构为更“可测试”(无需将问题转移到我们无法测试的另一段代码),我将非常感谢任何帮助之后)。
【问题讨论】:
-
这是您测试效果的第一步,还是您之前尝试过一些模式?
-
我们已经为我们不太复杂的效果设置了一些测试,但老实说我不太确定你说的是哪种模式。介意分享一本好书吗?
-
好的,给我1小时我会找到一些东西
-
请告诉我,你在 Karma 中使用过 TestBet、Spy 和异步单元测试之类的东西吗?
-
我们使用所需的 Spys(用于使用的服务)设置了 TestBed,并使用 fakeAsync() 环境进行需要它的测试。
标签: angular typescript unit-testing testing ngrx