我正在尝试测试看起来像这样的服务数据流:
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)发送信息)-但大多数情况下,我希望可以为我提供这种情况的更多一般建议