Тестирование углового эффекта CatchError - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь протестировать эффект, но не знаю, как с ним работать, когда он ловит ошибку.

Эффект

@Effect()
signup$: Observable<Action> = this.actions$.pipe(
    ofType(AuthActionTypes.SIGNUP),
    map((action: Signup) => action.payload),
    switchMap((user: any) => {
        this.userSignup = user;
        return this.createUserGQL.mutate({ userInput: user });
    }),
    switchMap(() => {
        return this.signInGQL.watch({
            email: this.userSignup.email,
            password: this.userSignup.password
        }).valueChanges.pipe(map((login: any) => {
            const authData = login.data.login;
            return authData;
        }));
    }),
    mergeMap((res: any) => {
        const token = res.token;
        this.localStorageService.setItem(AUTH_KEY, { token: token, isAuthenticated: true });
        return [new SignupSuccess, new SetToken(token)];
    }),
    catchError(err => {
        return of(new RetrieveError({ error: err }));
    })
);

Spec

it('should emit RetrieveError on error', () => {
        const userData: UserInputData = { name: 'test', email: 'test@test.com', password: 'secretsecret' };
        const signupAction = new Signup(userData);
        const error = 'ERROR';
        const errorAction = new RetrieveError({
            error: error
        });
        const valueSource = {
            a: signupAction
        };
        const valueSourceError = {
            e: errorAction
        };
        const source = cold('a', valueSource);
        const expected = cold('e', valueSourceError);
        const actions = new Actions(source);

        createUserGQL.mutate.and.returnValue(throwError(error));

        const effect = new AuthEffects(actions, router, localStorageService, createUserGQL, signInGQL);

        expect(effect.signup$).toBeObservable(expected);
    });

Ошибка Почему эффект имеет длину 2?[Ожидаемая $ .length = 2 будет равна 1. Неожиданно $ 1 = Объект ({frame: 0, уведомление: Уведомление ({вид: 'C', значение: не определено, ошибка: не определено, hasValue: false)})}) в массиве]. 1

...