首页 > 解决方案 > 如何编写测试用例来调用“路由器导航端订阅”中的方法?

问题描述

我正在根据路由器事件创建一些面包屑。我创建了一个带有 navigationEnd 和模拟路由器的路由器测试台,但无法正常工作。不明白如何在订阅中调用我的方法以及如何为此编写测试用例来调用这些方法

ngOnInit() {
this.router.events.pipe(filter(e instance of NavigationEnd)).subscribe( event => {
// calling this method 
this.callmethod();
// Initiating my breadcrumb method by passing the event
this.initiateBreadcrumb(event);
});

标签: angularunit-testingkarma-jasmineangular-test

解决方案


你可以这样做:

it('routing should call callmethod', () => {
    let callMethodSpy = spyOn(component, "callmethod").and.callThrough();
    component.ngOnInit();

    let event = new NavigationEnd(42, '/some-route', '/');
    TestBed.get(Router).events.next(event);

    expect(callMethodSpy).toHaveBeenCalled();
  });

并且不要忘记导入RouterTestingModule到您的TestBed.

TestBed.configureTestingModule({
  imports: [
    RouterTestingModule,
    ...
  ]
});

推荐阅读