我有以下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,
}
我的组织协会发生了什么变化?这是有效的,所以为什么不是
答案 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)