是否可以在与 FactoryGirl 的关联(特征内)中使用嵌套工厂?
Is it possible to use a nested factory in an association (within a trait) with FactoryGirl?
例如,假设我有一个带有嵌套工厂的 Address
和 belongs_to 一个 Zip
,还有一个 Order
有一个 Address
和理想情况下会与嵌套工厂之一建立关联的特征:
# File one with its own FactoryGirl.define do...
factory :zip do
end
# File two
factory :address do
zip # an address belongs_to a zip
factory :address_variant do
end
end
# File 3
factory :order do
trait :with_address_variant do
address_variant # EDIT: this was my bug :)
end
end
我想这样使用它:FactoryGirl.build_stubbed(:order, :with_address_variant)
。但是当 运行 测试时我得到 NoMethodError: undefined method 'address_variant='
。
如果我按照下面的建议在特征中使用 FactoryGirl.build_stubbed(:address_variant)
,当 rspec 尝试初始化所有内容时,我会得到一个 find': Factory not registered: zipcode (ArgumentError)
。
这甚至可以做到吗?
更新
我仓促回答了原来的答案。我认为这是完成你想要的事情的正确方法:
factory :address do
attribute "1"
end
factory :address_variant, :parent => :address do
attribute "2"
end
factory :order do
trait :with_address_variant do
association :address, :factory => :address_variant
end
end
===
试试这个:
trait :with_address_variant do
FactoryGirl.build_stubbed(:address_variant)
end
例如,假设我有一个带有嵌套工厂的 Address
和 belongs_to 一个 Zip
,还有一个 Order
有一个 Address
和理想情况下会与嵌套工厂之一建立关联的特征:
# File one with its own FactoryGirl.define do...
factory :zip do
end
# File two
factory :address do
zip # an address belongs_to a zip
factory :address_variant do
end
end
# File 3
factory :order do
trait :with_address_variant do
address_variant # EDIT: this was my bug :)
end
end
我想这样使用它:FactoryGirl.build_stubbed(:order, :with_address_variant)
。但是当 运行 测试时我得到 NoMethodError: undefined method 'address_variant='
。
如果我按照下面的建议在特征中使用 FactoryGirl.build_stubbed(:address_variant)
,当 rspec 尝试初始化所有内容时,我会得到一个 find': Factory not registered: zipcode (ArgumentError)
。
这甚至可以做到吗?
更新
我仓促回答了原来的答案。我认为这是完成你想要的事情的正确方法:
factory :address do
attribute "1"
end
factory :address_variant, :parent => :address do
attribute "2"
end
factory :order do
trait :with_address_variant do
association :address, :factory => :address_variant
end
end
===
试试这个:
trait :with_address_variant do
FactoryGirl.build_stubbed(:address_variant)
end