J'ai rencontré le même problème en créant des suites de test 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 :
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Lors de l'exécution des tests, si vous ne passez pas une valeur de propriété dans votre mock ActivatedRoute "useValue", vous obtiendrez un résultat indéfini lors de la détection des changements à l'aide de "fixture.detectChanges()". Ceci est dû au fait que les valeurs fantaisie pour ActivatedRoute ne contiennent pas la propriété params.property. Il est donc nécessaire que la valeur fictive useValue contienne ces paramètres pour que le dispositif fixe puisse initialiser la propriété '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();
});
});
Vous pouvez alors commencer à faire des tests, par exemple :
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Maintenant, si vous souhaitez tester une autre valeur de propriété, vous pouvez mettre à jour votre mock ActivatedRoute comme suit :
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 vous aidera !