微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

存储依赖效果单元测试的问题

如何解决存储依赖效果单元测试的问题

这是我第一种处理单元测试效果方法,我不知道如何为我的商店依赖效果编写测试,这是效果代码

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: 'fasdfa@sdf.ati',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 举报,一经查实,本站将立刻删除。