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

为何npm可正常运行但Yarn不行?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主版本不兼容。

解决步骤

  1. 清理Yarn缓存并重新安装
    这是最常见的修复方式,彻底清除旧的依赖和缓存:

    # 清理Yarn缓存
    yarn cache clean
    # 删除旧的依赖和lock文件
    rm -rf node_modules yarn.lock
    # 重新安装依赖
    yarn install
    
  2. 检查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的版本。

  3. 验证Jest测试环境配置
    查看你的Jest配置文件(jest.config.js)或package.json里的jest字段,确认testEnvironment设置正确:

    // jest.config.js示例
    module.exports = {
      testEnvironment: 'jsdom', // React项目通常用这个
      // 其他配置...
    };
    

    同时确保jest-environment-jsdom已经正确安装在依赖中(如果是Jest 28+,这个包需要单独安装)。

  4. 对比lock文件差异
    如果上面的方法都没用,可以对比package-lock.json和yarn.lock里Jest相关依赖的版本,看看Yarn是不是拉取了不同的版本,然后在package.json里手动指定兼容的版本号来强制统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:06:52