You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React测试报错ReferenceError: global is not defined及依赖冲突求助

React测试失败及Jest版本冲突问题

问题说明

我是React和React Testing新手,跟着一门过时的Udemy旧课程学习。已经完成依赖更新,项目能正常构建启动,但测试全部失败,报错如下:

Test suite failed to run
    ReferenceError: global is not defined
      at Object.<anonymous> (node_modules/graceful-fs/graceful-fs.js:92:1)
      at Object.<anonymous> (node_modules/expect/build/toThrowMatchers.js:10:24)
      at Object.<anonymous> (node_modules/expect/build/index.js:35:48)

执行npm list jest后发现Jest版本存在冲突:

$ npm list jest
react-testing@0.1.0 C:\Users\636309\Notes\React\ReactTesting\Udemy2HourCourseReactTesting\react-testingCopy
├─┬ react-scripts@5.0.1
│ ├─┬ jest-watch-typeahead@1.1.0
│ │ └── jest@27.5.1 deduped invalid: "^29.0.0" from node_modules/ts-jest
│ └── jest@27.5.1 invalid: "^29.0.0" from node_modules/ts-jest
└─┬ ts-jest@29.2.4
  └── jest@27.5.1 deduped invalid: "^29.0.0" from node_modules/ts-jest

npm error code ELSPROBLEMS
npm error invalid: jest@27.5.1 C:\Users\steve\Notes\React\ReactTesting\Udemy2HourCourseReactTesting\react-testingCopy\node_modules\jest
npm error A complete log of this run can be found in: C:\development\npmCache\_logs\2024-08-10T03_18_02_069Z-debug-0.log

当前package.json配置:

{
  "name": "react-testing",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/dom": "^10.4.0",
    "@types/node": "^22.1.0",
    "@types/react": "^18.3.3",
    "@types/react-dom": "^18.3.0",
    "axios": "^1.7.3",
    "invariant": "^2.2.4",
    "levenary": "^1.1.1",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-scripts": "5.0.1"
  },
  "devDependencies": {
    "@testing-library/jest-dom": "^6.4.8",
    "@testing-library/react": "^16.0.0",
    "@testing-library/user-event": "^14.5.2",
    "@types/jest": "^29.5.12",
    "ts-jest": "^29.2.4",
    "typescript": "~5.5.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jest-environment-jsdom",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "jest": {
    "collectCoverageFrom": [
      "src/**/*.{ts,tsx,js,jsx}",
      "!src/serviceWorker.ts",
      "!src/index.tsx",
      "!src/**/*.d.ts"
    ]
  }
}

解决步骤

1. 修复Jest与ts-jest版本冲突

react-scripts@5.0.1自带jest@27.5.1,但你安装的ts-jest@29.2.4要求jest@^29.0.0,版本不兼容导致冲突。需降级ts-jest到适配jest@27的版本:

npm uninstall ts-jest
npm install ts-jest@27.1.5 --save-dev

2. 降级测试库适配Jest版本

@testing-library/jest-dom@6.x需要jest@28+,与当前jest版本不兼容,需降级:

npm uninstall @testing-library/jest-dom
npm install @testing-library/jest-dom@5.16.5 --save-dev

同时,@testing-library/react@16.x和@testing-library/user-event@14.x也需降级到适配jest@27的版本:

npm uninstall @testing-library/react @testing-library/user-event
npm install @testing-library/react@12.1.5 @testing-library/user-event@13.5.0 --save-dev

3. 解决global is not defined报错

在src目录下创建setupTests.ts文件,添加全局变量映射:

(globalThis as any).global = globalThis;

然后在package.json的jest配置中引入该文件:

"jest": {
  "collectCoverageFrom": [
    "src/**/*.{ts,tsx,js,jsx}",
    "!src/serviceWorker.ts",
    "!src/index.tsx",
    "!src/**/*.d.ts"
  ],
  "setupFilesAfterEnv": ["<rootDir>/src/setupTests.ts"]
}

4. 清理依赖并重新安装

删除现有依赖文件后重新安装,确保版本完全适配:

rm -rf node_modules package-lock.json
npm install

最后重新运行测试:

npm test

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:27:02