为何npm可正常运行但Yarn不行?Yarn装依赖后测试报错咨询
yarn test报environment.setup is not a function,但npm安装就正常? 问题重现
FAIL src/Dashboard/AppBar/Tests/AppBar.test.js
● Test suite failed to run
TypeError: environment.setup is not a function
at node_modules/jest-runner/build/run_test.js:71:23
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 0.478s
Ran all test suites related to changed files.
这种情况我之前也碰到过,核心原因是Yarn和npm的依赖解析/锁定机制差异,导致Jest相关依赖版本不兼容,具体来说有这几个可能:
可能的原因
- 依赖版本锁定不一致:npm的
package-lock.json和Yarn的yarn.lock对依赖树的解析逻辑不同,可能导致Jest、jest-environment-jsdom这类核心测试包拉取了不兼容的版本(比如Jest是29.x,但环境包是28.x),从而出现方法不存在的报错。 - Yarn缓存损坏:Yarn的本地缓存可能存储了损坏或不完整的依赖包,安装时直接复用了这些缓存,导致测试环境的依赖有问题。
- Jest配置与依赖不匹配:项目的Jest配置(比如
testEnvironment字段)指定了某个环境,但Yarn安装的对应环境包版本和Jest主版本不兼容。
解决步骤
清理Yarn缓存并重新安装
这是最常见的修复方式,彻底清除旧的依赖和缓存:# 清理Yarn缓存 yarn cache clean # 删除旧的依赖和lock文件 rm -rf node_modules yarn.lock # 重新安装依赖 yarn install检查Jest相关依赖版本一致性
打开你的package.json,确保所有Jest相关包(jest、jest-environment-jsdom、babel-jest、@testing-library/jest-dom等)的大版本一致。比如如果jest是^29.7.0,那jest-environment-jsdom也应该是^29.7.0,不要混合28.x和29.x的版本。验证Jest测试环境配置
查看你的Jest配置文件(jest.config.js)或package.json里的jest字段,确认testEnvironment设置正确:// jest.config.js示例 module.exports = { testEnvironment: 'jsdom', // React项目通常用这个 // 其他配置... };同时确保
jest-environment-jsdom已经正确安装在依赖中(如果是Jest 28+,这个包需要单独安装)。对比lock文件差异
如果上面的方法都没用,可以对比package-lock.json和yarn.lock里Jest相关依赖的版本,看看Yarn是不是拉取了不同的版本,然后在package.json里手动指定兼容的版本号来强制统一。
内容的提问来源于stack exchange,提问作者softshipper

