是否可以在与 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