避免在循环中复制记录

时间:2013-06-24 19:23:35

标签: ruby-on-rails ruby rspec factory-bot

我的CompanyEmployee模型分别有两个工厂。 EmployeeCompany存在 belongs_to 关系。这是我的两个工厂:

factory :company do
  name "foo company"
end

factory :employee do
  company
  name 'Willy Bytes'      
end

在某些情况下,我需要遍历数据数组并相应地填充新的Employee记录,以针对我的规范中的不同条件进行测试。为了说明,我使用以下规范来测试我的一个包含验证:

it "should be valid if they like red blue or green" do
  ["red","blue","green"].each do |c|
    FactoryGirl.build(:employee, :favourite_colour => c).should be_valid
  end
end

it { FactoryGirl.build(:upload, :favourite_colour => "other").should_not be_valid }

但是,我对母公司名称字段有唯一性约束,当我尝试构建记录时会产生错误。有没有一种智能的方法来解决/避免这个问题?我经常遇到这些类型的规范,通常我要做的是定义一个Company工厂并将其分配给循环中的每个记录,但它感觉不直观并导致大量重复。序列是唯一的另一种方式吗?

3 个答案:

答案 0 :(得分:0)

您可以使用factory_girl的sequence generator。你的工厂看起来像这样。

factory :company do
  sequence(:name) {|n| "company #{n}"}
end

答案 1 :(得分:0)

一行:

sequence(:name) { |n| "Company #{n}" }

答案 2 :(得分:0)

我在这里找到了我想要的内容:Find or create record through factory_girl association

使用initialize_with方法覆盖默认构建/新行为似乎是要走的路:

factory :company do
 initialize_with { Company.find_or_create_by_name("Foo Company") }
end