如何在角度2中测试`Router NavigationEnd Event`?

时间:2017-07-27 19:24:50

标签: angular unit-testing jasmine angular-routing

有谁知道如何测试Router NavigationEnd Event?我在Angular 2中有以下代码,我正在使用Jasmine。

import { Injectable, EventEmitter } from '@angular/core';
import { Router, NavigationEnd, Event } from '@angular/router';

@Injectable()
export class IhmPageClassService {
    emitPageClass = new EventEmitter<string>();
    currentRoute: string;

    constructor(router: Router) {
        router.events.subscribe((event: Event) => {
            if (event instanceof NavigationEnd) {
                this.currentRoute = (<NavigationEnd>event).url;
            }
        });
    }
}

感谢。

2 个答案:

答案 0 :(得分:2)

所以我有一些运气使用主题进行测试。

在测试设置中,您可以创建eventsSubject。

let eventsSub = new BehaviorSubject<any>(null);

然后创建你的routerStub:

routerStub = { events: eventsSub }

然后创建NavigationEnd对象。

let homeNav = new NavigationEnd(1, 'home', 'home');

现在使用routerStub作为测试中Router服务的值,您现在应该能够测试您的功能。

it('should set the currentRoute correctly', () => {
  eventSub.next(homeNav);
  fixture.detectChanges();
  expect(component.currentRoute).toEqual('home')      
});

答案 1 :(得分:-1)

我不确定为什么你需要测试路由器事件,但是如果你想调试它们,请启用这样的跟踪选项:

RouterModule.forRoot(routes, { enableTracing: true })

这将在浏览器控制台上打印有关路由器事件的信息: enter image description here