Reactjs ReferenceError:未定义窗口。我在jest运行npm测试到单元测试时遇到了这个错误

Reactjs ReferenceError:未定义窗口。我在jest运行npm测试到单元测试时遇到了这个错误,reactjs,react-native,react-redux,jestjs,Reactjs,React Native,React Redux,Jestjs,ReferenceError:未定义窗口。我在jest运行npm测试到单元测试时遇到了这个错误。错误来自以下代码导出函数。有人遇到这种错误并解决了吗 import { createStore, applyMiddleware, compose, combineReducers } from 'redux'; import thunk from 'redux-thunk'; import rootReducer from '../modules/rootReducer'; export

ReferenceError:未定义窗口。我在jest运行npm测试到单元测试时遇到了这个错误。错误来自以下代码导出函数。有人遇到这种错误并解决了吗

import { createStore, applyMiddleware, compose, combineReducers } from 'redux';
import thunk from 'redux-thunk';

import rootReducer from '../modules/rootReducer';

    export function injectAsyncReducers(asyncReducers) {
  const injectReducers = Object.keys(asyncReducers).reduce((all, item) => {
    if (store.asyncReducers[item]) {
      delete all[item];
    }

    return all;
  }, asyncReducers);

  store.asyncReducers = Object.assign({}, store.asyncReducers, injectReducers);
  replaceReducers(rootReducer);
}

那个么,并没有窗口,因为你们在终端上运行jest,而不是浏览器。您应该手动将窗口定义为全局变量

package.json

...
"jest": {
    "globals": {
      "window": {
        // whatever you need, put here manually.
      }
    }
  }

当您没有为jest使用正确的TestenVirement配置时,通常会出现此错误,在这种情况下,它应该是jsdom(您可以在此处查看:)。您可以在package.json文件中进行如下配置:

“jest”:{“测试环境”:“节点”}

如果您使用的是create react应用程序,则测试脚本应如下所示:

“测试”:“反应脚本测试--env=jsdom”


或者您可以在此处看到testEviroment配置的更多选项:

代码本身没有对
窗口的引用。你的
rootReducer
看起来像什么?这是我从'redux'导入的rootReducer文件代码{combineReducers};从“../reducers/fetchMenu”导入菜单;从“../reducers/chooseOrderType”导入orderType;从“../reducers/fetchVendorInfo”导入供应商;导出默认组合生成器({菜单,供应商,订单类型});它返回以下错误类型错误:window.WebSocket不是前面提到的构造函数,最好找到引用了
window.WebSocket
的包。添加
--env=jsdom
修复了我的问题。我正在将一个项目迁移到CRA,但忘了将其添加到我的测试命令中