FactoryBot与RSpec测试中:user工厂重复定义错误排查求助
解决FactoryBot::DuplicateDefinitionError(factory already registered :user)
问题根源
- FactoryBot在Rails项目中会自动扫描并加载
spec/factories目录下的所有工厂文件,无需手动引入 - 你的
pages_spec.rb里手动引入了./spec/factories/user.rb,加上FactoryBot自动加载的3个User相关工厂,导致:user工厂被重复注册,触发错误
修复步骤
删除测试文件中的手动引入代码
打开pages_spec.rb,移除这行代码:require './spec/factories/user.rb'清理重复的User工厂定义
由于项目中有3个User相关工厂文件,需确保只有一个文件定义基础:user工厂:- 若多个文件都定义了
:user,保留一个基础工厂,其余文件改为定义工厂别名或继承基础工厂的变体 - 示例:如果需要管理员用户工厂,可在单独文件中这样写:
FactoryBot.define do factory :admin_user, parent: :user do role { 'admin' } # 其他专属属性 end end
- 若多个文件都定义了
验证修复
重新运行对应测试:rspec spec/controllers/pages_controller_spec.rb
内容的提问来源于stack exchange,提问作者antonio
相关产品推荐
相关产品推荐

