2013-06-24 175 views
2

我有两个工厂分别为我的CompanyEmployee模型。 Employeebelongs_toCompany的关系。这里是我的两个工厂:避免在循环中复制记录

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工厂,并将其分配给循环中的每个记录,但它不直观并导致大量重复。序列是唯一的解决方法吗?

回答

0

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

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

我希望有一种方法可以避免创建多余的公司使用Factory Girl完全记录。我几乎想了一些[find_or_create_by_name](http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Accessing+attributes+before+they+have+been+typecasted)。 – Noz

0

一号线:

​​