redux-api-middleware 抛出获取未定义

redux-api-middleware throws fetch is not defined

我最近将 redux-api-middleware 从 2.3.0 升级到 3.0.1 当 运行 我用 jest@22.2.1 测试时,我得到这个 ReferenceError:

ReferenceError: fetch is not defined

  19 | export function sortPolicyChain (payload: Array<ChainPolicy>): SortPolicyChainAction {
  20 |   return { type: 'SORT_POLICY_CHAIN', payload }
> 21 | }
  22 |
  23 | export type UpdatePolicyInChainAction = { type: 'UPDATE_POLICY_IN_CHAIN', policyConfig: ChainPolicy }
  24 | export function updatePolicyInChain (policyConfig: ChainPolicy): UpdatePolicyInChainAction {

  at Object.<anonymous> (node_modules/redux-api-middleware/lib/index.cjs.js:404:3)
  at Object.<anonymous> (app/javascript/src/Policies/actions/PolicyChain.jsx:21:27)
  at Object.<anonymous> (spec/javascripts/Policies/actions/PolicyChain.spec.jsx:3:20)

堆栈跟踪指向 PolicyChain.jsx 中的这一行:

export function fetchChain (serviceId: string): RSSAAction {
  return {
    [RSAA]: {
      endpoint: `/admin/api/services/${serviceId}/proxy/policies.json`,
      method: 'GET',
      credentials: 'same-origin',
      types: [REQUEST, SUCCESS, FAILURE]
    }
  }
}

根据 documentation here:

If provided, the fetch option must be a function that conforms to the Fetch API. Otherwise, the global fetch will be used.

但是好像找不到全局fetch。有什么想法吗?

代码库可以在 github.

中找到

发生这种情况是因为 Jest 在 Node.js 内部运行,它没有全局 fetch()。您可以通过安装 isomorphic-fetch 并将其添加到 Jest setupFiles:

来解决此问题

require('isomorphic-fetch');

createMiddleware与您自己的提取编译函数一起使用

https://github.com/agraboso/redux-api-middleware#createmiddlewareoptions