在组件中我有一个实际从内部调用服务方法的方法,在该方法中我订阅了服务响应的结果。
但是在测试时我使用了SpyOn.and.returnValue
方法,所以现在它没有调用服务方法,但我没有得到响应。它总是调用订阅错误块。
这是我的测试文件代码:
it('should check getMVRData method', inject([WorkflowService, PersonalDataService], (workFlow: WorkflowService, personalDataService: PersonalDataService) => {
let fixture = TestBed.createComponent(PersonalDataComponent);
let inst = fixture.componentInstance;
spyOn(personalDataService, 'getMVRData').and.returnValue(Observable.of(WORKFLOW_DATA));
inst.getMVRData();
// After sometime I am checking my console
setTimeout(() => {
console.log(inst.value);
console.log(personalDataService.value)
}, 1001);
}));
这是我的组件代码:
// Get License Data
value = 'subscribe data'
getMVRData() {
this.value = 'inside get mvr method';
this._personalDataService.getMVRData().subscribe(response => {
let data = JSON.parse(response._body);
this.value = 'inside success';
}, error => {
// This block is calling always
this.value = 'inside error'
});
}
这是我的服务文件方法:
value: any;
getMVRData(): Observable < any > {
this.value = 'inside service';
let action = this.mvrConfig['action'];
return this._authHttp.get(AppConfig.API_ENDPOINT() + action + '/?t=' + new Date(), this.headerOptions)
.map(this._extractData)
.map(this._doAction)
.catch(this._handleError);
}
服务文件方法没有接到电话,这工作正常。但returnValue
spyOn
功能无效。
先谢谢。
答案 0 :(得分:-2)
您必须调用此处返回的Observable的 subscribe 方法:
spyOn(personalDataService, 'getMVRData').and.returnValue(Observable.of(WORKFLOW_DATA));
your.testfile.ts (并检查您感兴趣的任何值)
it('should check getMVRData method', inject([WorkflowService, PersonalDataService], (workFlow: WorkflowService, personalDataService: PersonalDataService) => {
let fixture = TestBed.createComponent(PersonalDataComponent);
let inst = fixture.componentInstance;
spyOn(personalDataService, 'getMVRData').and.returnValue(Observable.of(WORKFLOW_DATA));
inst.getMVRData().subscribe(value => {
console.log(value);
expect(value).toEqual('It matchs');
});
}));