我正在为以下代码编写测试用例
@select([
'reportingTabState',
'actualDelayDetails',
'ActualDelayDetailsResponse',
'DelayDetails',
'actualDelayDetails',
])
actualDelayDetails$;
this.actualDelayDetailsSub = this.actualDelayDetails$
.first()
.subscribe(actualDelayDetails => {
//rest of the code..
});
像这样在我的spec.ts中模拟它
const actualDelay$ = MockNgRedux.getSelectorStub([
'ActualDelayDetailsResponse',
]);
actualDelay$.next(actualDelayDetails);
actualDelay$.complete();
Object.defineProperty(component, 'actualDelayDetails$', { writable: true });
component.actualDelayDetails$ = actualDelay$;
fixture.detectChanges();
在actualDelayDetails中,我有这样的模拟对象:
const actualDelayDetails = {
ActualDelayDetailsResponse: [{
primaryDelay: {
code: 'CR2F',
minutes: '1 min',
details: 'REPLACEMENT OF A FLIGHT OPS CREWMEMBER D',
detailsDesc: 'REPLACEMENT OF A FLIGHT OPS CREWMEMBER D',
},
secondaryDelay: {
code: 'F06',
minutes: '23 min',
details: 'DUE TO CAPTAIN DISCRETION TO NOT ACCEPT',
detailsDesc: 'DUE TO CAPTAIN DISCRETION TO NOT ACCEPT',
},
}],
};
请帮助我解决这个问题。
答案 0 :(得分:0)
您的import 'rxjs/add/operator/first'
中可能有一个main.ts
(或类似名称)。这将修补应用程序内部使用的可观察对象,以包括此操作符进行链接。您可以通过将其包含在测试脚本的顶部或测试环境加载的全局脚本中来解决此问题。
更好的方法是使用pipe()
来采用链接运营商的新方法:
import { first } from 'rxjs/operators';
this.actualDelayDetails$.pipe(
first()
).subscribe(() => {
这样,您可以确定文件中使用的内容在测试中也可用
了解更多here
答案 1 :(得分:0)
“ first()运算符采用可选的谓词函数,并且在源完成时没有值匹配时发出错误通知。” 因此,我尝试删除first()方法,并且在不破坏我的功能的情况下工作良好。 感谢PierreDuc的即时回复。但不幸的是,这种解决方案对我不起作用。