我一直在使用redux-saga-test-plan编写一些redux-saga测试,但是在尝试提供一些选择来伪造ExpectSaga测试的某些值时遇到了一些问题。似乎提供程序没有用我们的值替换我们的reselect函数调用,而是实际上试图运行reselect函数。该项目正在使用react-boilerplate模板。
我已经尝试过使用匹配器替代伪造选择器的不同变体,但仍然遇到相同的问题。
这是我要测试的传奇:
export function* categoriseA() {
const sku = yield select(makeSelectSKU());
const { ql, sscc } = yield select(makeSelectItemData());
const site = yield select(makeSelectSite());
const params = {
url: `refurbishment/api/sites/${site}/refurbishments`,
method: 'put',
data: {
quality_label: ql,
classification_type: 'A_GOODS',
...(sku && { sku }), // a way of conditionally creating a property
...(sscc && { sscc }), // a way of conditionally creating a property
},
};
yield put({ type: PUT_A_GOODS_REQUEST, ...params });
yield put(push(SCAN_BARCODE_URL));
}
使用此测试:
it('it pushes SCAN_BARCODE_URL and create a PUT_A_GOODS_REQUEST', () => {
expectSaga(saga)
.provide([
[select(selectors.makeSelectSKU()), 'sku'],
[select(selectors.makeSelectItemData()), mockItemData],
[select(selectors.makeSelectSite()), 'site'],
])
.put(push(SCAN_BARCODE_URL))
.dispatch(chooseACategory())
.run();
});
我得到的错误是: 似乎重新选择选择器功能正在运行,并试图从化简器访问全局状态,我认为会被提供程序伪造?
TypeError: Cannot read property 'global' of undefined
at selectGlobal (/Users/ccc/development/workspace/grip/refurb-frontend/app/containers/App/selectors.js:945:38)
at /Users/ccc/development/workspace/grip/refurb-frontend/node_modules/reselect/lib/index.js:87:37
at /Users/ccc/development/workspace/grip/refurb-frontend/node_modules/reselect/lib/index.js:39:25
at runSelectEffect (/Users/ccc/development/workspace/grip/refurb-frontend/node_modules/@redux-saga/core/dist/redux-saga-core.dev.cjs.js:761:26)
at runEffect (/Users/amurray/development/workspace/grip/refurb-frontend/node_modules/@redux-saga/core/dist/redux-saga-core.dev.cjs.js:1234:7)
at digestEffect (/Users/amurray/development/workspace/grip/refurb-frontend/node_modules/@redux-saga/core/dist/redux-saga-core.dev.cjs.js:1301:5)
at next (/Users/ccc/development/workspace/grip/refurb-frontend/node_modules/@redux-saga/core/dist/redux-saga-core.dev.cjs.js:1191:9)
at proc (/Users/ccc/development/workspace/grip/refurb-frontend/node_modules/@redux-saga/core/dist/redux-saga-core.dev.cjs.js:1138:3)
at /Users/ccc/development/workspace/grip/refurb-frontend/node_modules/@redux-saga/core/dist/redux-saga-core.dev.cjs.js:614:17
at immediately ...
答案 0 :(得分:0)
您不应调用要模拟的选择器。 代替
select(selectors.makeSelectSKU()), 'sku']
您应该省略括号并执行以下操作:
select(selectors.makeSelectSKU), 'sku']