【问题标题】:Factory_bot, how to reuse parent factory in relationship where child belongs to both parent and parents parent?Factory_bot,如何在孩子既属于父母又属于父母的关系中重用父工厂?
【发布时间】:2020-12-28 05:26:46
【问题描述】:

Shift belongs_toEmployeeSiteEmployee belongs_to Site

鉴于此,这里有一个工厂:

  factory :site do
    ...
  end
  
  factory :employee do
    site
    ...
  end

  factory :shift do
    employee # creates a site
    site # creates a new site; i.e., this is NOT same site as employee site, each call creates a new site
    ...
  end

当我运行 create(:shift) 时,我希望默认创建的 shift.siteshift.employee.site 相同,但目前的行为是创建了 2 个站点,而我只想要一个。

谢谢,

【问题讨论】:

    标签: ruby-on-rails ruby testing factory-bot


    【解决方案1】:

    您可以访问 Factory Bot 中已定义的字段。所以这行得通,

      factory :site do
        ...
      end
      
      factory :employee do
        site
        ...
      end
    
      factory :shift do
        employee # creates a site
        site { employee.site }
        ...
      end
    

    【讨论】:

    • 这行得通,但是问题,它产生了一个不同的错误,现在如果我运行create(:shift, employee_id: @employee.id),而不是从工厂覆盖employee,它会再次创建一个新的员工ID,现在我再次冗余。我试图在:shift 工厂中设置employee_id { employee.id },然后在employee 上获得NoMethodError(这是有道理的,没有什么需要创建它)
    • 你可以试试create(:shift, employee: @employee)
    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多