我正在用rspec测试一个具有几个CompanyAddresses模型。

我正在使用factory girl来生成我的测试环境,我希望默认的Company拥有一些注册的地址,而我希望具有Company的特定情况的特征,而没有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

如何制造工厂,以便在使用trait 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

关于ruby-on-rails - 工厂女孩,默认特征中具有关联,但是在传递特征时使其不关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30165257/

10-15 07:39