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

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

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

相关文章:

css - 如何使用 :global css classes - css modules

javascript - react native : Toggle drawer & navigation bar visibility in routes

reactjs - redux reselect 正在返回一个函数

javascript - 重新选择重用选择器意外行为

apple-m1 - 无法正确设置 react 样板 : "npm ERR! ngrok - platform darwinarm64 is not supported."

reactjs - react 样板身份验证登录页面在页面重新加载时闪烁

javascript - 在框架ui 'badge'中将 'panel'设置为 `ant design`

javascript - 如何在React Bootstrap中更改 Accordion 折叠方向?

reactjs - 使用 firebase 部署后 react 网站未显示

javascript - 这是使用 createSelector 组合选择器的正确方法吗?