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

运行RSpec执行测试时无法读取测试文件触发LoadError报错

RSpec运行测试时加载失败问题排查

问题复现代码

编写的User模型测试代码如下:

require 'rails_helper'

RSpec.describe User, type: :model do
  before { @user = FactoryGirl.build(:user) }

  it { expect(@user).to respond_to(:email) }
end

执行RSpec命令后直接抛出依赖加载错误,核心报错片段:

WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
      diff-lcs (< 2.0, >= 1.2.0)
      Available/installed versions of this gem:
      - 1.5.0
      - 1.3
WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'
...
in `require': cannot load such file -- rspec/core/formatters/progress_formatter (LoadError)

根因定位

该报错和测试代码本身无关,属于Ruby环境gem依赖问题:

  • 全局gem环境存在版本冲突:diff-lcs作为RSpec的核心依赖,同时安装了两个符合版本约束的发行版,RubyGems无法确定加载目标,触发依赖清理逻辑后打乱了RSpec的加载路径
  • rspec-core 3.9.3安装不完整或组件版本不匹配:可能是安装过程中断、不同版本RSpec组件混装,导致内置的进度格式化器文件缺失,触发LoadError
  • 运行环境为Ruby 2.3.0,该版本已经停止维护多年,系统自带RubyGems版本过旧,反复抛出Gem::ConfigMap is deprecated警告,进一步加剧了依赖解析的不稳定性

可行解决方案

按操作成本从低到高依次尝试:

  1. 清理冲突的diff-lcs版本,执行命令:
gem cleanup diff-lcs

全局环境下执行如果提示权限不足,在命令前加sudo即可,执行后仅保留单个版本的diff-lcs。
2. 重装版本一致的RSpec组件,避免混装:

# 卸载所有已安装的RSpec相关组件
gem uninstall rspec rspec-core rspec-expectations rspec-mocks rspec-rails -aIx
# 安装版本统一的RSpec
gem install rspec -v 3.9.3
# Rails项目额外安装对应版本的rspec-rails
gem install rspec-rails -v 3.9.3

如果你的项目使用Bundler管理依赖,不要直接调用全局rspec命令,在项目目录下用bundle exec rspec执行测试,优先加载项目内Gemfile锁定的依赖版本,规避全局gem污染问题。

  1. 若上述操作仍无法解决,说明系统自带Ruby环境的gem配置已经混乱,建议通过rbenv或rvm安装独立的Ruby版本(推荐2.7及以上匹配项目要求的版本),在新的独立Ruby环境下重新执行bundle install安装所有依赖,彻底隔离系统级Ruby的脏环境影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:18:16