Ran dans le même problème lors de la création de suites de tests pour un chemin de routage comme:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
Dans le composant, j'ai initialisé la propriété passée comme suit:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Lors de l'exécution des tests, si vous ne transmettez pas une valeur de propriété dans votre simulation ActivatedRoute "useValue", alors vous obtiendrez undefined lors de la détection des modifications en utilisant "fixture.detectChanges ()". Cela est dû au fait que les valeurs fictives pour ActivatedRoute ne contiennent pas la propriété params.property. Ensuite, il est nécessaire que la valeur useValue fictive ait ces paramètres pour que le projecteur initialise «this.property» dans le composant. Vous pouvez l'ajouter comme:
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();
});
});
Le vous pouvez commencer à tester comme par exemple:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Maintenant, disons que vous souhaitez tester une valeur de propriété différente, vous pouvez alors mettre à jour votre maquette ActivatedRoute comme:
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');
});
J'espère que cela t'aides!