请问我有问题。我需要测试如下代码的功能:
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: Cannot read property 'prod_id' of undefined
此错误可能是因为 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
。
关于angular - 类型错误 : Cannot read property 'prod_id' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756452/