工厂女孩,关联默认特征,但在特征通过时不关联

factory girl, association in default trait, but leave it unassociated when trait is passed

我正在使用 rspec 具有多个 AddressesCompany 模型进行测试。

我正在使用 factory girl 来生成我的测试环境,我希望默认公司注册了几个地址,而我希望公司的特定案例没有任何特征 Address.

这是我现在在工厂里做的事情:

FactoryGirl.define do
  factory :company do
    sequence(:name) { |n| "company #{n}" }
    description     { "description #{name}" }

    trait :no_address do 
      addresses nil
    end

    after(:create) do |company, evaluator|
      create_list(:address, 3, company: company)
    end
  end
end

我怎样才能使工厂在我使用特性 no_address 时根本不创建地址?

谢谢,

FactoryGirl 的 transient attributes 可能正是您所需要的:

FactoryGirl.define do
  factory :company do
    transient do
      create_address true
    end

    sequence(:name) { |n| "company #{n}" }
    description     { "description #{name}" }

    trait :no_address do
      transient do 
        create_address false
      end
    end

    after(:create) do |company, evaluator|
      create_list(:address, 3, company: company) if evaluator.create_address
    end
  end
end