angular - 如何在 ngRX 效果中测试 forkJoin
问题描述
我正在尝试使用 forkjoin 测试 ngrx 效果,但我无法使其工作。这是代码:
requestVacationDays$ = createEffect(
() =>
this.action$.pipe(
ofType(VacationsActions.RequestVacationDays),
switchMap(action => {
const httpRequests: Observable<any>[] = [];
action.requestedDays.forEach(request => {
httpRequests.push(this.vacationService.requestVacationDay(request));
});
return forkJoin(httpRequests).pipe(
switchMap(res => {
return [ModalActions.OpenModal({
header: 'Requested vacations',
message: 'All vacations has been requested correctly.'
}), VacationsActions.GetUserVacations()];
}),
);
})
), { dispatch: true }
);
这是测试(它还没有完成,但它没有到达 forkJoin 内的 switchMap):
fit('should request several vacation days', () => {
actions$ = of(vacationActions.RequestVacationDays({ requestedDays: ['2020-09-25', '2020-09-26'] }));
const vacationServiceSpy = spyOn(vacationService, 'requestVacationDay').and.returnValue(cold('-a', { a: null}));
effects.requestVacationDays$.subscribe(action => {
expect(vacationServiceSpy).toHaveBeenCalledTimes(2);
});
});
解决方案
forkJoin
仅在其源 observables 发出完成信号时才发出。在您的测试中,您只发出值null
- 您还需要在之后发出完成信号
推荐阅读
- javascript - 如果文本框不为空,则拒绝刷新页面
- ocaml - 我正在尝试测试此流动性智能合约代码,但如果显示错误。流动性类似于 tezos 的智能合约语言 ocaml。
- android - Google READ_CALL_LOG 权限政策更改
- angular - Angular 6 - 通过具有反应形式的子组件中的 ng-template 循环
- jms - 当第一个 tibco 服务器关闭时,客户端应用程序无法连接到第二个 tibco 服务器
- postgresql - Postgres - 尝试添加 postgis 时出现语法错误
- php - PHP中的光标分页与列
- dojo - 如何知道执行了特定的行?
- javascript - jQuery KendoEditor 不剥离粘贴的 HTML
- java - 如何使用intellij进行远程调试?