繁体   English   中英

角度单元测试TypeError:无法读取未定义的属性“订阅”

[英]Angular unit testing TypeError: Cannot read property 'subscribe' of undefined

我正在使用auth创建一个入门工具包模板,并使用CRUD创建一个示例( https://github.com/fransyozef/basic-login-angular

现在,我是单元测试的新手,我正在努力使创建组件的测试至少运行。 但是我被困住了

TypeError: Cannot read property 'subscribe' of undefined

我认为错误来自

  resolveRoute() {
    this.route.params.subscribe(params => {
      if (params['id']) {
        this.id = +params['id'];
        this.getItem();
      } else {
        this.handleItemNotFound();
      }
     });
  }

在文件https://github.com/fransyozef/basic-login-angular/blob/master/src/app/items/item-edit/item-edit.component.ts中

现在我有测试文件: https : //github.com/fransyozef/basic-login-angular/blob/master/src/app/items/item-edit/item-edit.component.spec.ts

有人可以帮我这个忙吗?

您应该模拟自己的路由策略。 如我所见,您在TestBed imports使用了routingModule 假设您自己的 routingModule仅提供您自己的路由,并且将无法模拟/监视其他路由。 因此,我鼓励您首先调整test.helper.ts Test helper routes

export const TestRoutingImports = [
  HttpClientTestingModule,
  RouterTestingModule, // <-- Use RouterTestingModule instead
]; 

(RouterTestingModule)模块设置要用于测试的路由器。 它提供了Location,LocationStrategy和NgModuleFactoryLoader的间谍实现。

RouterTestingModule提供模拟,RouterModule不提供。

您应该做的第二件事是从测试平台上删除您的provide 这里没有必要。 我的意思是以下部分:

{
  provide: ActivatedRoute, useValue: {
     snapshot: { params: { id: 1 } }
  }
},

删除它,因为这将覆盖组件提供程序。 在您的情况下,则不需要。

希望我能为您服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM