J-m*_*man 6 unit-testing jasmine ngrx angular angular6
我的产品功能有一个功能选择器和相邻的选择器:
const getProductState = createFeatureSelector<fromProducts.State>('products');
export const getOldProducts = createSelector(
getProductState,
state => state.oldProducts
);
export getNewProducts = createSelector(
getProductState,
state => state.newProducts
);
Run Code Online (Sandbox Code Playgroud)
我想对这些选择器进行单元测试。我读过的大多数文章和帖子都只涉及非特征选择器,所以是时候模拟特征状态了,我的测试将返回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);
});
Run Code Online (Sandbox Code Playgroud)
错误一直说Cannot read property 'oldProducts' of undefined,这让我相信getProductState功能选择器没有被正确模拟。
谢谢!
我遇到了同样的问题,这个线程帮助了我。虽然解决方案还不清楚。
projector正如@J-man 所说,您需要使用选择器中的函数。对于您的情况将是:
expect(selectors.getOldProducts.projector(state.oldProducts)).toBe(state.oldProducts);
| 归档时间: |
|
| 查看次数: |
4186 次 |
| 最近记录: |