angular - TypeError:无法读取未定义的属性“prod_id”
问题描述
请问我有问题。我需要测试如下代码的函数:
populateForm() {
this.activatedRoute.params.subscribe(
params => {
this.ws.getbyid(params['id']).subscribe(
prod=> {
this.prod= prod;
this.editprodForm.controls['prodnr'].setValue(prod.prodnr);
this.editprodForm.controls['proddesc'].setValue(prod.proddesc);
}
);
}
);
}
onupdatprod() {
this.areWeWaiting = true;
let updatprod= new Prod(
this.editprodForm.value
);
updatprod.prod_id= this.prod.prod_id;
this.ws.update(updatprod).subscribe(
result => {
if (result === true) {
Materialize.toast('success', 4000);
} else {
}
},
error => {
}
);
}
我的测试代码如下:
it('should call service.Updatewhen onupdateprod, Validation Error', done => {
const mock = [];
spyOn(component['as'], 'UpdateAlarms').and.callThrough()
let updateprod = new Prod('1231');
updateprod.prodnr= '4';
updateprod.proddesc= 'UpdateTest';
updateprod.prod_id= '1';
component['ws'].update(updateprod ).subscribe(fail => {
console.log('Validation Error')
console.log(fail)
expect(fail).toBeFalsy();
done();
});
component.onupdatprod();
})
我的错误是:
TypeError:无法读取未定义的属性“prod_id”
这个错误可能是因为prod_id
我从我调用 getbyid
的函数中获取onupdatprod()
updatprod.prod_id= this.prod.prod_id;
你能问我任何想法吗,如何阅读价值prod_id
谢谢
解决方案
您的方法onupdatprod
参考this.prod
:
updatprod.prod_id= this.prod.prod_id;
但是,this.prod
在您的方法中定义populateForm
:
this.prod= prod;
您的测试调用onupdatprod
但不调用populateForm
. 这意味着当onupdatprod
尝试访问时this.prod
,它是未定义的。
您需要populateForm
在测试代码中调用以便this.prod
定义。
推荐阅读
- google-bigquery - 修改 Google 数据洞察报告的刷新时间
- hyperledger-fabric - 超级账本中的共识协议是可插拔的吗?我们可以在 Fabric 网络中以某种方式使用 Indy 的 RBFT(Plenum)吗?
- android - 在 Android 中从 init.rc 执行本机文件
- php - 在同一页面中显示多种内容类型
- gradle - 读取命令行参数并拆分并执行循环并排除文件
- c# - 如何修复此错误 {"Length cannot be less than zero.\r\nParameter name: length"} in c# in my code 我正在使用带有 indexofany 的子字符串
- ios - ESC/POS 从 iOS 打印返回“未定义符号:_OBJC__$_regoPrinter”
- javascript - React 顶点图热图的高度在为其设置状态后没有改变
- typescript - TypeScript 类工厂 mixin 的结果“不是构造函数”
- javascript - [$NUM] 在 html 中是什么意思?