Bir yönlendirme yolu için test paketleri oluştururken aşağıdaki sorunla aynı sorunla karşılaştık:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
Bileşende, iletilen özelliği şu şekilde başlattım:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Testleri çalıştırırken, ActivatedRoute adlı sahte "useValue" nizde bir özellik değeri geçirmezseniz, "fixture.detectChanges ()" kullanarak değişiklikleri tespit ederken tanımsız olursunuz. Bunun nedeni, ActivatedRoute için sahte değerlerin params.property özelliğini içermemesidir. Ardından, fikstürün bileşendeki "this.property" öğesini başlatması için sahte useValue parametresinin bu parametrelere sahip olması gerekir. Bunu şu şekilde ekleyebilirsiniz:
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();
});
});
Örneğin test etmeye başlayabilirsiniz:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Şimdi, farklı bir mülk değerini test etmek istediğinizi varsayalım, ardından sahte ActivatedRoute'unuzu şu şekilde güncelleyebilirsiniz:
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');
});
Bu yardımcı olur umarım!