Rails 6.1项目Rspec模型测试报uninitialized constant Build如何解决?
核心报错原因
uninitialized constant Build 报错的根因是RSpec运行时没有加载Rails应用环境,导致无法识别项目中定义的Build模型类:
- 你的测试文件第一行引入的是
spec_helper.rb,这个是RSpec的基础配置文件,默认不会加载Rails全量环境,自然不会自动加载app目录下的模型类 - 你在Ruby控制台可以正常访问Build模型,是因为
rails c命令会默认加载全量Rails环境,和RSpec运行时的环境加载逻辑不同
另外No examples found是因为你写的it语句只有测试描述,没有对应的测试代码块,RSpec会将这类用例识别为未定义的待办项,不会统计为有效测试用例。
解决方案
按顺序执行以下操作即可解决问题:
- 替换测试文件的引入声明
将spec/models/build_spec.rb第一行的require 'spec_helper'替换为require 'rails_helper',rails_helper.rb是rspec-rails提供的配置文件,会自动加载全量Rails环境,自动识别所有项目定义的模型、控制器等类。 - 确认RSpec初始化完成
如果你的项目spec目录下没有rails_helper.rb文件,说明你还没执行RSpec的初始化命令,先运行:rails generate rspec:install
执行完成后会自动生成spec/rails_helper.rb、spec/spec_helper.rb两个配置文件。 - 补全测试用例代码块
解决No examples found报错,给每个it语句补充代码块,示例如下:require 'rails_helper' RSpec.describe Build, type: :model do it "Has a name" do build = Build.new(name: "测试建筑") expect(build.name).to eq("测试建筑") end # 其余测试用例同理补充对应的测试逻辑,暂时不想写实现也可以留空块 end - 特殊情况兜底
如果完成以上操作还是报常量未找到,可以在测试文件顶部手动引入Build模型文件:require Rails.root.join('app/models/build.rb')
一般情况下不需要该操作,只有当Rails自动加载规则异常时才需要手动引入。
内容的提问来源于stack exchange,提问作者Ipwn touch
相关产品推荐
相关产品推荐

