运行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警告,进一步加剧了依赖解析的不稳定性
可行解决方案
按操作成本从低到高依次尝试:
- 清理冲突的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污染问题。
- 若上述操作仍无法解决,说明系统自带Ruby环境的gem配置已经混乱,建议通过rbenv或rvm安装独立的Ruby版本(推荐2.7及以上匹配项目要求的版本),在新的独立Ruby环境下重新执行
bundle install安装所有依赖,彻底隔离系统级Ruby的脏环境影响。
内容的提问来源于stack exchange,提问作者Hurry Gamer
相关产品推荐
相关产品推荐

