我是FactoryGirl的新手,正在尝试以下简单场景:
factory :female, :class => Gender do
code 'Female'
end
factory :male, :class => Gender do
code 'Male'
end
factory :papas, :class => Customer do
first_name 'Jim'
last_name 'Papas'
association :gender, :factory => :male, :strategy => :build
end
factory :dumas, :class => Customer do
first_name 'Mary'
last_name 'Dumas'
association :gender, :factory => :female, :strategy => :build
end
那么在我的测试中:
create(:male)
create(:female)
create(:papas)
create(:dumas)
请注意,Customer类与Gender类存在关联关系belongs_to
,并且有一条验证规则,规定gender_id
应该存在。我还在Gender
类上设置了一条验证规则,要求它的code属性具有唯一性。在上面的
create(:papas)
语句中,在我的测试中,我会收到一个错误消息,说将要创建的Customer
无效,因为gender_id
为nil
。如果我在与gender相关的
Customer
:papas
工厂关联上移除:strategy => :build
,那么我就会收到一个错误消息,说正在尝试创建:papas
时,该gender的code已经存在。我需要做什么才能使我的测试按照上述要求创建数据?
请注意,我希望在其他测试中也能创建没有顾客的性别。不要告诉我使用工厂创建命令来创建顾客,并同时让顾客创建各自的性别。如果我尝试创建两个相同性别的顾客,这种方法将行不通。
另外,一定有更好的答案。
@male = create(:male)
@female = create(:female)
create(:papas, :gender => @male)
create(:dumas, :gender => @female)
(当使用固定装置时,这些东西已经可以直接使用了。我是否应该回到使用固定装置的方式?)