Cordova 这将由SafeSubscriber取代

Cordova 这将由SafeSubscriber取代,cordova,typescript,ionic3,angular5,Cordova,Typescript,Ionic3,Angular5,我们使用Angular5和Ionic 3的代码遇到问题 在我们的项目中,我们使用一个插件与摄像头交互,以扫描名片。扫描完成后,我们需要显示一个离子负载,告诉用户他的图片正在上传。此功能在移动设备上运行良好,但该功能的单元测试失败 以下是用户扫描名片时执行的代码示例: 公共扫描名片(fab?:fab容器):无效{ if(fab)fab.close(); 让它成为:ContactListPage=this; 此.scanService.scanBusinessCard()管道( concatMap(

我们使用Angular5和Ionic 3的代码遇到问题

在我们的项目中,我们使用一个插件与摄像头交互,以扫描名片。扫描完成后,我们需要显示一个离子负载,告诉用户他的图片正在上传。此功能在移动设备上运行良好,但该功能的单元测试失败

以下是用户扫描名片时执行的代码示例:

公共扫描名片(fab?:fab容器):无效{
if(fab)fab.close();
让它成为:ContactListPage=this;
此.scanService.scanBusinessCard()管道(
concatMap((图片:字符串)=>{
this.loading=this.loadingCtrl.create({
内容:this.uploadingText,
});
this.loading.present();
返回此.scanService.saveBusinessCard(图片);
}),
).订阅({
下一步:(数据)=>{
那。加载。解除();
this.createModal('ContactEditionPage',{contactId:data.contact},()=>{
这是loadContacts();
});
},
错误:(错误)=>{
如果(错误=='未选择图像'){
那。加载。解除();
返回;
}
此.errorHandlerService.handleError(错误);
},
});
}
在该部分中,此
的类型为
SafeSubscriber
,因此我们无法访问对象的变量。

我们认为这与我们用于测试的
mock
有关,下面是
ScanServiceMock
代码:

从'rxjs/Observable'导入{Observable};
从“rxjs/observable/ErrorObservable”导入{ErrorObservable};
导出类ScanServiceMock{
//scanBusinessCard返回的图片
公共图片:字符串=“”;
public raiseErrorOnScan:boolean=false;
public raiseErrorOnSave:boolean=false;
公共商业名片间谍:jasmine.Spy;
公共储蓄银行卡间谍:jasmine.Spy;
构造函数(){
this.scanBusinessCardSpy=spyOn(this'scanBusinessCard')。和.callThrough();
this.saveBusinessCardSpy=spyOn(this'saveBusinessCard')。和.callThrough();
}
公共名片():可见{
if(this.raiseErrorOnScan){
返回ErrorObservable.create('Error');
}
(这张照片)的可观测返回;
}
public saveBusinessCard():可见{
if(this.raiseErrorOnSave){
返回ErrorObservable.create('Error');
}
可观测的返回值of();
}
}

我们做错什么了吗?我们尝试了
let that=this
,但是在
concatMap
部分中,
that
未定义的。有什么想法吗?

到底是什么失败了?错误和相应的代码是什么?使用模拟的测试也应该显示在这里@H.B.我已经看到了这一点,这与考试失败无关;简单地说,我们希望
concatMap
中的
this
是一个
scanBusinessCard
对象,但事实并非如此,当使用上面的
ScanServiceMock
@GabLeRoux:
进行模拟时,它是一个
SafeSubscriber
对象:
只应被错误绑定,如果代码调用方式错误。请尝试用箭头功能替换
scanBusinessCard