问题描述
我有loadUserCacheRequestEffect $效果
loadUserCacheRequestEffect$ = createEffect(() =>
this.actions$.pipe(
ofType(ActionTypes.USER_SESSION_CACHE_REQUEST),switchMap(() => this.taskCacheKeyService.getCacheUserSessionData()
.pipe(
switchMap((sessionData: TaskCacheKey) => [
ActionTypes.USER_SESSION_CACHE_SUCCESS({ sessionData }),ActionTypes.TASK_DETAILS_REQUEST({
taskId: sessionData.taskId,templateNumber: sessionData.templateId
})
]),catchError((err) => {
return of(ActionTypes.USER_SESSION_CACHE_FAILURE({error: err.error.detail}));
})
))
)
);
我为成功的案例编写了单元测试
it('loadUserCacheRequestEffect should return USER_SESSION_CACHE_SUCCESS and TASK_DETAILS_REQUEST actions',() => {
actions$ = hot('a',{ a: fromActions.USER_SESSION_CACHE_REQUEST() });
const expected = cold('(bc)',{
b: fromActions.USER_SESSION_CACHE_SUCCESS({
sessionData: userSessionDataMock
}),c: fromActions.TASK_DETAILS_REQUEST({
taskId: userSessionDataMock.taskId,templateNumber: userSessionDataMock.templateId
})
});
expect(effects.loadUserCacheRequestEffect$).toBeObservable(expected);
});
当效果失败并返回ActionTypes.USER_SESSION_CACHE_FAILURE({error:err.error.detail})时,我想编写单元测试
解决方法
那应该做的,否则就必须对齐弹珠:
it('should handle error',() => {
actions$ = hot('a',{a: fromActions.USER_SESSION_CACHE_REQUEST()});
taskCacheKeyServiceSpy.getCacheUserSessionData.and.returnValue(cold('-#',{},{error: {details: 'something'}}));
const expected = cold('-b',{
c: ActionTypes.USER_SESSION_CACHE_FAILURE({error: err.error.detail})
});
expect(effects.loadUserCacheRequestEffect).toBeObservable(expected);
});
,
经过一些更正后,这是一个有效的示例:
it('it should handle error',() => {
actions$ = hot('a',{a: fromActions.USER_SESSION_CACHE_REQUEST()});
const taskCacheKeyServiceSpy = spyOn(taskCacheKeyService,'getCacheUserSessionData');
taskCacheKeyServiceSpy.and.returnValue(cold('-#',{error: {detail: 'something'}}));
const expected = cold('-b',{
b: fromActions.USER_SESSION_CACHE_FAILURE({error: 'something'})
});
expect(effects.loadUserCacheRequestEffect$).toBeObservable(expected);
});