2016-12-01 76 views

回答

3

您真正需要做的就是测试路由器导航方法是否使用正确的参数(即登录页面的路由)进行调用。尝试测试实际的导航可能会导致比单元测试所需的副作用更多的副作用。

要检查是否调用了Router.navigate方法,只需使用存根和间谍就可以了。

@Component({}) 
class SomeComponent { 
    constructor(private router: Router) {} 

    logout() { 
    this.router.navigate(['/login']) 
    } 
} 

let routerStub; 

beforeEach(() => { 
    routerStub = { 
    navigate: jasmine.createSpy('navigate'); 
    } 
    TestBed.configureTestModule({ 
    declaration: [ SomeComponent ], 
    providers: [ 
     { provide: Router, useValue: routerStub } 
    ] 
    }); 
}); 

it('it should navigate to login after user logs out',() => { 
    let component = TestBed.createComponent(SomeComponent).componentInstance; 
    component.logout(); 

    expect(routerStub.navigate).toHaveBeenCalledWith(['/login']); 
}) 
+0

我没有使用路由器。相反,使用NavController。对此有何建议? – devtiwa

+0

为NavController创建一个存根,并在'push'方法或'setRoot'上侦察。哪一个你正在使用 –

+0

'让导航= {setRoot:jasmine.createSpy('setRoot')}' –

0

Angular团队努力将测试融入角度环境的所有本地方面。如果您使用本地角路由器,那么他们已经构建了测试供您使用。看看这个BLOG。如果你没有使用角度路由器,那么你认为自己是独立的。