Angular 2 单元测试路由器导航

标签 angular unit-testing

有没有办法对路由器路由进行UNIT测试?

我正在使用Sinon来创建 spy 和 stub 。

组件

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']);
        });

最佳答案

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

检查路由器已导航到的 URL:

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
        };

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

providers: [{provide: Router, useValue: router}]

关于Angular 2 单元测试路由器导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47529724/

相关文章:

Angular 单元测试(带 Getter): Error: No value accessor for form control with name

javascript - AngularJS 单元测试,为什么有用?

c# - .NET 单元测试可以使用哪种动态语言?

angular - 无法在 Angular 6 的 setInterval() 中绑定(bind)变量

html - 模板解析错误

css - 应用十六进制值颜色 style.background-color

javascript - React Native 中的嵌套 ngfor 等价物

asp.net-mvc - 我如何对这种方法进行单元测试?

c# - Nunit、Asp.net MVC 4、Sql Server CE 4、错误提供程序

Angular 8 - 延迟加载自己 - AoT "No NgModule metada"