Как протестировать angular резольверов? - PullRequest
0 голосов
/ 17 июня 2020

Я написал резовлер на основе документации 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
                }));
            }
        })
    }
}
...