如何正确测试角度服务流

时间:2019-04-12 01:22:21

标签: angular jasmine jasmine-marbles

我正在尝试测试看起来像这样的服务数据流:

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' } } });
}));

这不起作用。我已经在测试代码上尝试了许多其他变体(例如直接通过next()通过userInfo $(这是一个BehaviorSubject)发送信息)-但大多数情况下,我希望可以为我提供这种情况的更多一般建议

0 个答案:

没有答案