我的Company
和Employee
模型分别有两个工厂。 Employee
与Company
存在 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
工厂并将其分配给循环中的每个记录,但它感觉不直观并导致大量重复。序列是唯一的另一种方式吗?
答案 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