问题描述
这是我第一种处理单元测试效果的方法,我不知道如何为我的商店依赖效果编写测试,这是效果代码:
validaCellulare$ = createEffect(() =>
this.actions$.pipe(
ofType(checkPIvaSuccess,inviaOtpIntent),concatMap(action => of(action).pipe(
withLatestFrom(this.onboardingSelector.modelStep1$)
)),exhaustMap(([action,datiStep1]) =>
this.onboardingService.postValidateCellulare(datiStep1.cellulare,OnboardingFactory.getCellulareWidgetId(this.centricoState.widgetStep1)).pipe(
map((res) => {
if (!!res && res.result.status === ApplicationParams.StatusResponse.success) {
if (action.type === checkPIvaSuccess.type) {
this.modalService.open(ApplicationParams.templateNames.OTP,{
isClosable: false
});
}
return inviaOtpSuccess();
}
return action.type === checkPIvaSuccess.type ? errorThrowing({statusCode: res.result.statusCode}) : inviaOtpIntentError();
}
),catchError(() => of(inviaOtpIntentError()))
)
)
));
在我的单元测试之上:
it('checkPIvaSuccess should dispatch inviaOtpSuccess,on success call postValidateCellulare and open modal OTP',() => {
store.setState({onboarding: {modelStep1: {partitaIva: '12345678960',email: '[email protected]',cellulare: '1204014001',flagPrivacy: true}}});
const mockResponse = Mock.onboarding.validate.cellulare[1].body;
const action = checkPIvaSuccess({guid: '1592314141805665835746662667089'});
const completion = inviaOtpSuccess();
actions$ = hot('a',{a: action});
const response = cold('(a|)',{a: mockResponse});
const expected = cold('b',{b: completion});
onboardingService.postValidateCellulare = jest.fn(() => response);
expect(effects.validaCellulare$).toBeObservable(expected);
expect(modalService.open).toHaveBeenCalledWith(ApplicationParams.templateNames.OTP,{isClosable: false});
});
在测试环境中调试此代码,似乎在concatMap中被阻止,并且立即停止,而无需调用内部服务器调用postValidateCellulare。有人可以帮我吗?
-----------------现在就可以编辑-------------
由于@BenLesh,我仔细检查了我的代码,但错过了设置appKeyStore = 'entityCache'
的权限。因此,按照以下说明替换规范完全可以:
it('checkPIvaSuccess should dispatch inviaOtpSuccess,() => {
store.setState({[appStoreKey]: {onboarding: {modelStep1: {partitaIva: '12345678960',flagPrivacy: true}}}});
const mockResponse = Mock.onboarding.validate.cellulare[1].body;
const action = checkPIvaSuccess({guid: '1592314141805665835746662667089'});
const completion = inviaOtpSuccess();
actions$ = hot('a',{a: action});
const response = cold('(a|)',{a: mockResponse});
const expected = cold('b',{b: completion});
onboardingService.postValidateCellulare = jest.fn(() => response);
expect(effects.validaCellulare$).toBeObservable(expected);
expect(modalService.open).toHaveBeenCalledWith(ApplicationParams.templateNames.OTP,{isClosable: false});
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)