使用重新选择选择器时无法提供/测试传奇

时间:2019-07-24 11:30:53

标签: reactjs reselect react-boilerplate redux-saga-test-plan

我一直在使用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 ...

1 个答案:

答案 0 :(得分:0)

您不应调用要模拟的选择器。 代替

select(selectors.makeSelectSKU()), 'sku']

您应该省略括号并执行以下操作:

select(selectors.makeSelectSKU), 'sku']