Encontrou o mesmo problema ao criar suítes de teste para um caminho de roteamento como:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
No componente, inicializei a propriedade passada como:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Ao executar os testes, se você não passar um valor de propriedade em seu ActivatedRoute simulado "useValue", ficará indefinido ao detectar alterações usando "fixture.detectChanges ()". Isso ocorre porque os valores simulados para ActivatedRoute não contêm a propriedade params.property. Em seguida, é necessário que o useValue simulado tenha esses parâmetros para que o aparelho inicialize 'this.property' no componente. Você pode adicioná-lo 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();
});
});
Você pode começar a testar como, por exemplo:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Agora, digamos que você gostaria de testar um valor de propriedade diferente, então você pode atualizar seu ActivatedRoute simulado 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 isto ajude!