我的FactoryGirl协会属性在哪里?

时间:2014-09-04 16:02:23

标签: factory-bot

我有以下FactoryGirl结构:

trait :basic_asset_attributes do
  association :organization, :factory => :transit_agency
end

trait :vehicle_attributes do
  basic_asset_attributes
  vin "1FMDU34E5XZ464008"
end

factory :bus, :class => :vehicle do
  vehicle_attributes
  seating_capacity 40
end

我的organization就像这样构建:

factory :organization do
  customer_id 1
  address1 '123 Fake St'
  city 'Fakesville'
  state 'PA'
  zip '17120'
  url 'http://www.example.com'
  phone '9999999999'
  sequence(:name) { |n| "Org #{n}" }

  factory :transit_agency, class: TransitAgency do
  end
end

FactoryGirl.build(:transit_agency).valid?返回true

但是,当我调用`FactoryGirl.attributes_for(:bus)时,我得到以下内容:

{:vin=>"1FMDU34E5XZ464008",
 :seating_capacity=>40,
}

我的组织协会发生了什么变化?这是有效的,所以为什么不是

1 个答案:

答案 0 :(得分:0)

我发现here这是设计的。

从那个问题:

  

由于处理不同嵌套和各种情况的复杂性,以及通常希望直接指定FK的常见用例(控制器规范),attributes_for不处理关联

以为他们继续说:

  

尽管管理协会和协会存在复杂性   数据,这并不意味着你运气不好;你可以写自己的   策略(或修改FactoryGirl' s)基于每个项目获得   期望的功能。

     

要覆盖FactoryGirl的attributes_for,您可以执行以下操作:

# spec/support/factory_girl/custom_attributes_for.rb
class CustomAttributesFor
  def association(runner)
    runner.run(:create)
  end

  def result(evaluation)
    evaluation.object.attributes # this assumes your instance responds to attributes and returns a hash, which AR::Base subclasses will do
  end
end

FactoryGirl.register_strategy(:attributes_for, CustomAttributesFor)