在 Angular 8 中,为了测试路由事件,我们需要使用 Angular 的 RouterTestingModule 和 Router 对象的事件。
下面是一个示例代码,演示了如何使用 RouterTestingModule 和 Router 对象的事件来进行单元测试:
import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { Router, NavigationEnd } from '@angular/router';
describe('Router events', () => {
let router: Router;
let events: NavigationEnd[];
beforeEach(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule]
});
router = TestBed.get(Router);
events = [];
router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
events.push(event);
}
});
});
it('should navigate to the home page', (done) => {
router.navigate(['/home']).then(() => {
expect(events.length).toBe(1);
expect(events[0] instanceof NavigationEnd).toBe(true);
expect(events[0].url).toBe('/home');
done();
});
});
it('should navigate to the about page', (done) => {
router.navigate(['/about']).then(() => {
expect(events.length).toBe(1);
expect(events[0] instanceof NavigationEnd).toBe(true);
expect(events[0].url).toBe('/about');
done();
});
});
});
在上述示例代码中,我们首先使用 TestBed 配置了 RouterTestingModule。然后在 beforeEach 中获取 Router 实例,并订阅它的事件来捕获 NavigationEnd 事件。在每个测试用例中,我们使用 Router 的 navigate 方法来测试路由事件。最后,我们断言收到的 NavigationEnd 事件是否正确。
这就是如何在 Angular 8 中单元测试路由事件的方法。