Stular ActivatedRoute在Angular 2测试中

时间:2016-12-06 13:58:09

标签: angular angular2-routing

我正在努力弄清楚如何限制角度的激活路线来满足我的目的。在我的一个组件中,我使用路由快照来获取激活路由的一部分网址:

let activatedPath = this.route.snapshot.children[0].url[0].path;

在我的测试中,我收到错误:

Error: Error in :0:0 caused by: undefined is not an object (evaluating 'this.route.snapshot.children[0].url')​​

所以我认为我需要存根激活路线:

class FakeActivatedRoute {
    // stub detail goes here
}

并在我的测试中提供:

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [RouterTestingModule],
      declarations: [
        SiteAdminComponent
      ],
      schemas: [NO_ERRORS_SCHEMA],
      providers: [
        { provide: ActivatedRoute, useClass: FakeActivatedRoute }
      ]
    })
     .compileComponents();
}));

任何人都可以提供关于存根实现的任何指导,这将允许我到达.snapshot.children[0].url[0].path吗?我现在很快就没有了: - )

1 个答案:

答案 0 :(得分:4)

您应该可以执行以下操作:

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [RouterTestingModule],
      declarations: [
        SiteAdminComponent
      ],
      schemas: [NO_ERRORS_SCHEMA],
      providers: [
        { 
          provide: ActivatedRoute, 
          useValue: {snapshot: {children: [{url: ['your/path/here']}]}} 
        }
      ]
    })
     .compileComponents();
}));

通过这种方式,您将提供一个模拟的activateRoute对象,该对象将回答这个完全相同的层次结构。