请问我有问题。我需要测试类似下面代码的函数:
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
你能问我任何想法,如何阅读价值{{1}}
感谢名单
答案 0 :(得分:0)
您的方法onupdatprod
引用了this.prod
:
updatprod.prod_id= this.prod.prod_id;
但是,this.prod
是在方法populateForm
中定义的:
this.prod= prod;
您的测试调用onupdatprod
,但不调用populateForm
。这意味着onupdatprod
尝试访问this.prod
时,它是未定义的。
您需要在测试代码中调用populateForm
,以便定义this.prod
。