Как правильно проверить угловой сервисный поток - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь протестировать поток служебных данных, который выглядит примерно так:

loadHeader() {
    this.cbData.fetchHeader()
        .pipe(
            tap(header => console.log('FIRST: ', header)),
            withLatestFrom(this.user.userInfo$),
            map(([header, user]) => {
                console.log(header);
                console.log(user);
                if (user) {
                    header.userProfile.user = user;
                }

                return header;
            }),
            tap(header => this.cbHeader.saveHeaderData(header)),
            tap(header => console.log('Im def here: ', header)),
        )
        .subscribe();
}

, используя тестовый пример в следующем формате:

fit('adds user info when user supplied', fakeAsync(() => {
    const u: UserAuthInfo = <UserAuthInfo>{ id: '1' };
    const h = { userProfile: {} };

    const header$ = cold('-x--|', { x: h });
    const user$ = cold('--y-|', { y: u });

    spyOn(cbData, 'fetchHeader').and.returnValue(header$);
    user.userInfo$ = <any>user$;

    spyOn(cbHeader, 'saveHeaderData').and.callThrough();

    service.loadHeader();
    tick(40);

    expect(cbHeader.saveHeaderData).toHaveBeenCalledWith({ userProfile: { user: { id: '1' } } });
}));

Это не работает,Я пробовал ряд других вариантов тестового кода (например, отправку информации через userInfo $ (это BehaviorSubject) напрямую с помощью next ()) - но в основном, я надеюсь, может дать мне более общее предложение для этого типа сценария.

...