Я написал резовлер на основе документации angular, но не могу понять, как его протестировать. Как вы запускаете резолвер?
Наибольшее беспокойство вызывает то, что я не могу проверить отправку. Не могу понять, как запустить и протестировать его, поскольку он продолжает давать сбой и сообщает, что отправка не была вызвана.
Вот тест, который я пробовал
// it('should call compareLoadedDataWithRouteParam() as CurrentdataLoaded is loaded', () => {
// spyOn(store, 'dispatch').and.callThrough();
// spyOn(resolver, 'compareLoadedDataWithRouteParam').and.callThrough();
// store.overrideSelector(productSelectors.isCurrentProductLoaded, true ]);
// resolver.waitForProductDataToLoad()
// expect(resolver.compareLoadedDataWithRouteParam).toHaveBeenCalled();
// })
expect (resolver.compareLoadedDataWithRouteParam ) .toHaveBeenCalled (); Кажется, не удается найти способ протестировать, даже если waitForInvestigationDataToLoad () вызывает вспомогательные методы.
@Injectable()
export class ProductResolver implements Resolve<any> {
constructor(private store: Store<any>) {}
resolve() {
return this.waitForProductDataToLoad();
}
waitForInvestigationDataToLoad(){
return this.store
.pipe(
select(ProductSelectors.isCurrentProductLoaded),
tap((isProductLoaded: boolean) => {
console.log('isProductLoaded')
//Check if the Investigations is loaded
if (!isProductLoaded) {
return this.requestProductByRouterId();
}
if(isProductLoaded){
//If Product is loaded compare to the current loaded param Id
return this.compareLoadedDataWithRouteParam();
}
}),
filter((loaded: boolean) => loaded),
take(1)
);
}
requestProductByRouterId(){
return this.store.pipe(
select(this.store.pipe(select(routeSelectors.getRouteId))),
take(1)
).subscribe( (routerId: string) =>{
this.store.dispatch(ProductActions.loadCurrentProduct({
productId: routerId
}));
})
}
compareLoadedDataWithRouteParam(){
return this.store.pipe(
select(ProductSelectors.getCurrentProductId),
withLatestFrom(this.store.pipe(select(routeSelectors.getRouteId))),
take(1)
).subscribe( ([productId, routerId]) =>{
// Check if the Investigations id match with the routeid
if(productId !== routerId){
// Request new data if does not match
this.store.dispatch(ProductActions.loadCurrentProduct({
productId: routerId
}));
}
})
}
}