2017-05-11 1 views
1

Angular2 애플리케이션에서 외부 URL로 이동할 수있는 방법을 찾으려고합니다.angular2는 외부 URL (경로 URL 아님)로 이동합니다.

route.navigate \ route.navigateByUrl 및 location.go (common lib) - 브라우저에 URL이 설정되었지만 아무 일도 발생하지 않았으며 탐색이 발생하지 않았습니다.

나는 window.location 솔루션을 사용하고 싶지 않습니다.

또한이 목표를 location.href (lib.es6)를 사용하여 얻을 수 있었지만이 솔루션을 조롱 할 수 없었습니다.

외부 URL로 이동하여이 기능에 대한 단위 테스트를 만들 수있는 방법이 있습니까? 감사합니다.

+0

그것은 일반 JS에서와 동일합니다합니다. –

+1

가능한 중복. 여기를 참조하십시오 http://stackoverflow.com/questions/39912264/routing-outside-of-application-angular2 –

답변

2

위의 문제를 조사하여 해결할 올바른 방법을 발견했습니다. location.go (common lib) 메서드는 내부 라우팅 탐색에만 사용할 수 있으며 외부 URL (비 앵귤러 경로 링크)로 리디렉션하려는 경우에는 작동하지 않습니다.

window.location 또는 location.href(lib.es6)과 같은 기본 DOM 요소 \ 특성을 모방 할 방법이 없습니다 (기능과 달리).

제 해결책은 이동, 경로 및 집과 같은 몇 가지 방법이있는 위치 서비스를 구성하는 것입니다. 각 메소드는 lib.es6 위치를 사용하여 필요한 메소드를 호출해야합니다. 예를 들어 : LocationService.go(url)는 호출합니다 : location.href = url

참고 :이 서비스는 외부 URL 리디렉션을 필요로하는 모든 곳에서 사용됩니다.

선언 위치 서비스 :

const locationSpy: LocationService = new LocationService(); 

공급자로 를 주입 조롱 서비스 다음 TestBed.configureTestingModule 추가에

:을 .spec 파일에 대한 비웃음 위치 서비스에 의해 처리됩니다

providers: [ 
    {provide: LocationService, useValue: locationSpy} 
    ] 

우리가 사용하는 것을 조롱 방법에 SpyOn을 정의 :

spyOn(locationSpy, 'go'); 

테스트 외부 재 호출 :

expect(locationSpy.go).toHaveBeenCalledWith('expected URL'); 

감사 , 둘다