我的产品功能有一个功能选择器和相邻的选择器:
const getProductState = createFeatureSelector<fromProducts.State>('products');
export const getOldProducts = createSelector(
getProductState,
state => state.oldProducts
);
export getNewProducts = createSelector(
getProductState,
state => state.newProducts
);
我想针对这些选择器进行单元测试。我阅读的大多数文章和帖子只涉及非特征选择器,所以是时候模拟特征状态了,我的测试返回状态对象的 undefined
。我的规范文件如下所示:
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
StoreModule.forRoot({}),
StoreModule.forFeature('products', fromProduct.reducer)
],
declarations: [],
providers: [{
provide: Store, useClass: class { select = jasmine.createSpy('select'); dispatch = jasmine.createSpy('dispatch'); }
}]
})
mockStore = TestBed.get(Store);
}));
it('getOldProducts should return the oldProducts', () => {
const state = {
name: 'Product1',
oldProduct: {
price: 45.00
},
newProduct: {
price: 50.00
}
}: fromProduct.State;
expect(selectors.getOldProducts(state.oldProducts)).toBe(state.oldProducts);
});
错误一直说 无法读取未定义的属性“oldProducts”
,这让我相信 getProductState
功能选择器没有被正确模拟。
谢谢!
最佳答案
我遇到了同样的问题,这个帖子帮助了我。虽然解决方案还不清楚。
如@J-man 所说,您需要使用选择器中的 projector
函数。
对于您的情况将是:
expect(selectors.getOldProducts.projector(state.oldProducts)).toBe(state.oldProducts);
关于angular - 如何使用 Angular 6 在 Jasmine 中对 ngrx 功能选择器进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51754766/