У меня тестовый модуль Jasmine на моих селекторах ngrx. Первый работает нормально, но второй всегда возвращает undefined, хотя я вижу, что редуктор работает правильно.
Селекторы выглядят так:
export const selectProductState = createFeatureSelector<State, ProductState> (
'product'
);
export const selectProductDetailsState = createSelector(
selectProductState,
((state: ProductState) => state.product)
);
export const selectProduct = createSelector(
selectProductDetailsState,
((state: ProductDetails) => state.product)
);
и мои тесты выглядят так:
describe('selectProductDetailsState', () => {
it('should return state of product store slice', () => {
let result;
store.pipe(
select(fromSelectors.selectProductDetailsState)
).subscribe(value => ( result = value ));
expect(result).toEqual(undefined);
store.dispatch(new fromActions.LoadProductSummarySuccess(product));
expect(result).toEqual(
product
);
});
});
describe('selectProduct', () => {
it('should return the product state', () => {
let result;
store.pipe(
select(fromSelectors.selectProduct)
).subscribe(value => ( result = value ));
expect(result).toEqual(undefined);
store.dispatch(new fromActions.LoadProductSummarySuccess(product));
expect(result).toEqual(product);
});
});
selectProductDetailsState
возвращает продукт, как и ожидалось, но selectProduct
возвращает неопределенное значение.
Если вам нужно больше моего кода, просто кричите, что вам нужно.
Вот как я настраивал магазин в тестах:
describe('Product summary selectors', () => {
let store: Store<State>;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
StoreModule.forRoot(fromStore.reducers)
]
});
store = TestBed.get(Store);
});
// tests go here
})