angular - 类型错误 : Cannot read property 'prod_id' of undefined

标签 angular unit-testing typescript testing jasmine

请问我有问题。我需要测试如下代码的功能:

  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/

相关文章:

angular - 检查 JWT 到期是否足以授权用户?

unit-testing - 测试驱动开发成本节约

angular - 热与冷 Observables

javascript - 在 Angular2 中重置路由更改时的服务变量

asp.net - 棕地 ASP.NET 应用程序的有用/现实的代码覆盖率目标

c++ - 需要谷歌模拟帮助,

Jest 单元测试中的 Angular 循环依赖问题

typescript - 类型 ... 不可分配给类型 'never' .(2322)

node.js - TypeScript:使用ZeroMQ ROUTER/DEALER时占用大量内存

angular cli AOT编译错误