Mengalami masalah yang sama saat membuat rangkaian pengujian untuk jalur perutean sebagai:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
Di dalam komponen, saya menginisialisasi properti yang diteruskan sebagai:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Saat menjalankan pengujian, jika Anda tidak meneruskan nilai properti di ActivatedRoute tiruan "useValue", Anda akan mendapatkan tidak terdefinisi saat mendeteksi perubahan menggunakan "fixture.detectChanges ()". Ini karena nilai tiruan untuk ActivatedRoute tidak berisi properti params.property. Kemudian, ini diperlukan untuk useValue tiruan untuk memiliki params tersebut agar fixture dapat menginisialisasi 'this.property' dalam komponen. Anda dapat menambahkannya sebagai:
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();
});
});
Anda dapat memulai pengujian sebagai contoh:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Sekarang, katakanlah Anda ingin menguji nilai properti yang berbeda, lalu Anda dapat memperbarui ActivatedRoute tiruan Anda sebagai:
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');
});
Semoga ini membantu!