Angular 2单元测试路由器导航

时间:2017-11-28 10:51:30

标签: angular unit-testing

有没有办法让UNIT测试路由器路由?

我使用Sinon创建间谍和存根。

组件

onSubmit(value: Authentication){
        this.authenticateService.getTokenFromServer(value).subscribe(v => {
            const token = this.tokenService.getToken();
            if(token){
                this.router.navigate([Config.videoPage]);

            }
        });
    }

测试

let router: any;
beforeEach(() => {
        router = createStubInstance(Router);

     it('(onSubmit() send user form to server)', () => {
            sut.onSubmit({name: 'Abc', password: '123'});
            expect(router.navigate).toHaveBeenCalledWith(['/video']);
        });

1 个答案:

答案 0 :(得分:1)

单元测试的主要目标是检查是否已调用路由器导航。验证实际导航可能是 e2e测试的一部分。

检查路由器已导航到的网址:

expect(router.navigate).toHaveBeenCalledWith(['/video']);

如果您想检查导航在每个规范中发生的次数:

expect(router.navigate).toHaveBeenCalledTimes(2);   

编辑

创建模拟路由器:

let router = {
            navigate: jasmine.createSpy('navigate'),    // to spy on the url that has been routed
        };

并在providers配置的TestBed部分中添加以下内容:

providers: [{provide: Router, useValue: router}]
相关问题