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

FactoryBot与RSpec测试中:user工厂重复定义错误排查求助

解决FactoryBot::DuplicateDefinitionError(factory already registered :user)

问题根源

  • FactoryBot在Rails项目中会自动扫描并加载spec/factories目录下的所有工厂文件,无需手动引入
  • 你的pages_spec.rb里手动引入了./spec/factories/user.rb,加上FactoryBot自动加载的3个User相关工厂,导致:user工厂被重复注册,触发错误

修复步骤

  1. 删除测试文件中的手动引入代码
    打开pages_spec.rb,移除这行代码:

    require './spec/factories/user.rb'
    
  2. 清理重复的User工厂定义
    由于项目中有3个User相关工厂文件,需确保只有一个文件定义基础:user工厂:

    • 若多个文件都定义了:user,保留一个基础工厂,其余文件改为定义工厂别名或继承基础工厂的变体
    • 示例:如果需要管理员用户工厂,可在单独文件中这样写:
      FactoryBot.define do
        factory :admin_user, parent: :user do
          role { 'admin' }
          # 其他专属属性
        end
      end
      
  3. 验证修复
    重新运行对应测试:

    rspec spec/controllers/pages_controller_spec.rb
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:32:04