我正在尝试找到一种能够从Angular2应用程序导航到某个外部URL的方法。
route.navigate \ route.navigateByUrl和location.go(common lib) - 在浏览器中设置了网址,但没有任何反应,也没有发生导航。
我不想使用window.location解决方案。
另外,我能够通过使用location.href(lib.es6)来实现这个目标,但我无法模拟这个解决方案。
有什么方法可以导航到外部URL并为此功能创建单元测试? 感谢
答案 0 :(得分:1)
我调查了上述问题并找到了解决问题的正确方法。 使用location.go(common lib)方法只能用于内部路由导航,如果我们想要重定向到外部URL(非Angular路由链接),它将无法工作。
无法模仿原生DOM元素\属性(与函数不同),如:window.location
或location.href(lib.es6)
。
我的解决方案是配置具有以下几种方法的位置服务:go,path和home。每个方法都应该使用lib.es6位置来调用所需的方法。
例如:
LocationService.go(url)
将调用:location.href = url
注意:此服务将用于需要外部URL重定向的所有位置。 在.spec文件上模拟位置服务将由以下人员处理:
声明位置服务:
const locationSpy: LocationService = new LocationService();
将Mocked服务作为提供者注入:
在TestBed.configureTestingModule
添加:
providers: [
{provide: LocationService, useValue: locationSpy}
]
在我们使用的模拟方法上定义SpyOn
:
spyOn(locationSpy, 'go');
测试外部重定向调用:
expect(locationSpy.go).toHaveBeenCalledWith('expected URL');
由于 叶兰