Me encontré con el mismo problema al crear conjuntos de pruebas para una ruta de enrutamiento como:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
En el componente, inicialicé la propiedad pasada como:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Cuando ejecute las pruebas, si no pasa un valor de propiedad en su Mock ActivatedRoute "useValue", entonces no estará definido cuando detecte cambios usando "fixture.detectChanges ()". Esto se debe a que los valores simulados de ActivatedRoute no contienen la propiedad params.property. Luego, es necesario que useValue simulado tenga esos parámetros para que el dispositivo inicialice 'this.property' en el componente. Puedes agregarlo como:
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();
});
});
Puede comenzar a probar como, por ejemplo:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Ahora, digamos que le gustaría probar un valor de propiedad diferente, luego puede actualizar su Mock ActivatedRoute como:
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');
});
¡Espero que esto ayude!