angular2导航到外部URL(不是路由URL)

时间:2017-05-11 13:03:33

标签: angular redirect routing location

我正在尝试找到一种能够从Angular2应用程序导航到某个外部URL的方法。

route.navigate \ route.navigateByUrl和location.go(common lib) - 在浏览器中设置了网址,但没有任何反应,也没有发生导航。

我不想使用window.location解决方案。

另外,我能够通过使用location.href(lib.es6)来实现这个目标,但我无法模拟这个解决方案。

有什么方法可以导航到外部URL并为此功能创建单元测试? 感谢

1 个答案:

答案 0 :(得分:1)

我调查了上述问题并找到了解决问题的正确方法。 使用location.go(common lib)方法只能用于内部路由导航,如果我们想要重定向到外部URL(非Angular路由链接),它将无法工作。

无法模仿原生DOM元素\属性(与函数不同),如:window.locationlocation.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');

由于 叶兰