我一直在使用 redux-saga-test-plan 编写一些 redux-saga 测试,但是在尝试提供一些选择以伪造一些值给 expectSaga 测试时遇到了一些问题。似乎提供者并没有用我们的值替换我们的重新选择函数调用,而是实际上试图运行重新选择函数。该项目正在使用 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();
});
我得到的错误是: 似乎 reselect 选择器函数正在运行并试图从我认为会被提供者伪造的 reducer 访问全局状态?
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 ...
最佳答案
你不应该调用你试图模拟的选择器。 而不是
select(selectors.makeSelectSKU()), 'sku']
你应该省略括号并做:
select(selectors.makeSelectSKU), 'sku']
关于reactjs - 使用重新选择选择器时无法提供/测试传奇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57181906/