라우팅 경로에 대한 테스트 스위트를 만드는 동안 다음과 같은 문제가 발생했습니다.
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
구성 요소에서 전달 된 속성을 다음과 같이 초기화했습니다.
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
테스트를 실행할 때 모의 ActivatedRoute "useValue"에 속성 값을 전달하지 않으면 "fixture.detectChanges ()"를 사용하여 변경 사항을 감지 할 때 정의되지 않습니다. 이는 ActivatedRoute의 모의 값에 params.property 속성이 포함되어 있지 않기 때문입니다. 그런 다음, 픽스처가 컴포넌트에서 'this.property'를 초기화하기 위해 모의 useValue에 해당 매개 변수가 있어야합니다. 다음과 같이 추가 할 수 있습니다.
let fixture: ComponentFixture<YourComponent>;
let component: YourComponent;
let activatedRoute: ActivatedRoute;
beforeEach(done => {
TestBed.configureTestingModule({
declarations: [YourComponent],
imports: [ YourImportedModules ],
providers: [
YourRequiredServices,
{
provide: ActivatedRoute,
useValue: {
snapshot: {
params: {
property: 'yourProperty',
someId: someId
},
data: {
yourResolvedValue: { data: mockResolvedData() }
}
}
}
}
]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(YourComponent);
component = fixture.debugElement.componentInstance;
activatedRoute = TestBed.get(ActivatedRoute);
fixture.detectChanges();
done();
});
});
다음과 같이 테스트를 시작할 수 있습니다.
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
이제 다른 속성 값을 테스트하고 싶다면 모의 ActivatedRoute를 다음과 같이 업데이트 할 수 있습니다.
it('should ensure property param is newProperty', async () => {
activatedRoute.snapshot.params.property = 'newProperty';
fixture = TestBed.createComponent(YourComponent);
component = fixture.debugElement.componentInstance;
activatedRoute = TestBed.get(ActivatedRoute);
fixture.detectChanges();
expect(activatedRoute.snapshot.params.property).toEqual('newProperty');
});
도움이 되었기를 바랍니다!