有没有办法对路由器路由进行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/