1

각도 2 router.navigate에 대한 스텁을 쓰는 데 문제가 있습니다. 현재 아래에 작성된 스텁이 있습니다. 어떤 각도의 문서에 표시됩니다.각도 2 테스트 라우터 재스민과 카르마 함께

@Injectable 
export class RouterStub { 
    navigate(commands: any[], extras?: NavigationExtras) { } 

그러나이 스텁을 사용할 때 다음 오류가 발생합니다.

TypeError: this.router.navigate is not a function 

내 탐색 방법은 다음과 같습니다.

let summaryLink = ['/summary', this.client.id, this.client.lastName]; 
this.router.navigate(summaryLink); 

어떤 도움을 주시면 감사하겠습니다.

업데이트 만 ...이 테스트는 내가 발견 한 비 테스트 메소드 인 here을 사용하여 작동시킬 수있었습니다. 그러나 누군가가 TestBed 메서드로이 테스트를 수행하는 방법을 이해할 수 있다면 도움을 주시면 감사하겠습니다. 감사합니다.

답변

1

라우터 모듈을 포함한 테스트를 부트 스트랩해야합니다. 이것은 응용 프로그램을 부트 스트랩하는 것과 거의 같습니다.

그런 다음 라우터에 대한 참조를 얻을 수 있습니다. 상태에 대한

beforeEach(() => { 
    router = TestBed.get(Router); 
    fixture = TestBed.createComponent(YourComponent); 
    component = fixture.componentInstance; 
    element = fixture.nativeElement; 
}); 

테스트 (구성 요소가 등등 렌더링 얻을 때문에 의존성이 필요) :

it('routes to the dummy component', fakeAsync(() => { 
    tick(1000); 
    fixture.detectChanges(); 

    router.navigate(['dummy']); 

    tick(1000); 
    fixture.detectChanges(); 

    expect(router.isActive('/dummy', true)).toBe(true); 
})); 

통신 테스트 (라우팅하지 않으며, 우리가 탐색 정말 무슨 일이 있었 여부를 확인해야합니다) :

it('routes to the dummy component', fakeAsync(() => { 
    spyOn(router, 'navigate').and.callFake(() => {}); 
    tick(1000); 
    fixture.detectChanges(); 

    router.navigate(['dummy']); 

    tick(1000); 
    fixture.detectChanges(); 

    expect(router.navigate).toHaveBeenCalledWith(['dummy']); 
})); 

실제 테스트에서는 navigate() 메소드를 테스트하지 않습니다. 실제로 사용자 행동의 일부를 테스트 할 것입니다 (예 : 클릭

를 컴퍼넌트 (이 경우에 YourComponent)

onClick() { 
    this.router.navigate(['dummy']); 
} 

시험에서 (a 클릭 트리거에 의해 이동()을 대체)

element.querySelector('button').click();