有没有办法让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']);
});
答案 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}]