Модульный тест NGRX с эффектом Marbles для внешнего URL - PullRequest
5 голосов
/ 13 мая 2019

Когда запускается эффект, я хотел бы проверить обе наблюдаемые в модульном тесте, чтобы получить 100% покрытие кода для этой части кода.потому что window.location.href запущен, я не могу проверить его правильно.

export class RouteHelper {
    static redirectToExternalUrl(url: string): any {
        window.location.href = url;
    }
}

Эффект

@Effect()
handleCreatePaymentSuccess$: Observable<
    {} | routerActions.Go
> = this.actions$.pipe(
    ofType(cartConfigActions.CREATE_PAYMENT_SUCCESS),
    switchMap((action: any) => {
        if (action.payload.redirect) {
            /* istanbul ignore next */
            return Observable.create(
                RouteHelper.redirectToExternalUrl(action.payload.redirect),
            );
        } else {
            return of(
                new routerActions.Go({
                    path: [RouteHelper.paths['validate']],
                }),
            );
        }
    }),
);

Проверка работоспособности для условия else

it('should dispatch router action Go on success if no redirect url is provided', () => {
    const payload = { redirect: null };
    const action = new fromCartConfig.CreatePaymentSuccess(payload);
    const completion = new routeractions.Go({
        path: [RouteHelper.paths['validate']],
    });

    actions$.stream = cold('-a', { a: action });
    const expected = cold('-c', { c: completion });

    expect(effects.handleCreatePaymentSuccess$).toBeObservable(expected);
});

Проверка не работоспособности для условия if

it('should redirect to url that is returned from api', () => {
    const payload = { redirect: 'http://www.stackoverflow.com' };
    spyOn(RouteHelper, 'redirectToExternalUrl').withArgs(payload.redirect);

    const action = new fromCartConfig.CreatePaymentSuccess(payload);
    const completion = Observable.create(RouteHelper.redirectToExternalUrl);

    actions$.stream = cold('-a', { a: action });
    const expected = cold('-c', { c: completion });

    expect(effects.handleCreatePaymentSuccess$).toBeObservable(expected);
});

Может кто-нибудь объяснить, как проверить условие If?

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Решение:

it('should dispatch router action Go on success if redirect url is provided', () => {
    spyOn(RouteHelper, 'redirectToExternalUrl').and.callFake(() => {});
    const payload = { redirect: 'www.buckaroo.nl' };
    const action = new fromCartConfig.CreatePaymentSuccess(payload);

    actions$.stream = cold('-a', { a: action });
    const expected = cold('');

    expect(effects.handleCreatePaymentSuccess$).toBeObservable(expected);
    expect(RouteHelper.redirectToExternalUrl).toHaveBeenCalled();
});
0 голосов
/ 14 мая 2019

Вы можете сделать RouteHelper инъекционным и обеспечить фиктивную реализацию во время ваших тестов. Таким образом, вы можете проверить, был ли вызван метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...