我有belongs_to的一个榜样的帐户模型。
factory :role do
name "student"
end
factory :account do
user
role
end
第一工厂创建一个名为“学生”的角色。 第二工厂创建关联到这是在以前的工厂创建的学生角色的帐户。 它也与用户......这是不是对这个问题的重要关联。
我有很多角色进行测试(管理员,学生,助手)......我不想在角色工厂指定“学生” ......那太静态。 如何指定在创建帐户出厂时创造什么样的作用? 喜欢:
factory :account do
user
role_id { factory :role { name: "admin"} }
end
什么是实现这一目标的最佳方式是什么?
如果你想要一个纯粹的FG的解决方案,你可以使用特性:
factory :account do
user
trait :student do
association :role, :name => "student"
end
trait :admin do
association :role, :name => "admin"
end
end
FactoryGirl.create :account, :student
FactoryGirl.create :account, :admin
然而,当你创建工厂对象可以覆盖工厂的属性。 这允许更多的灵活性:
FactoryGirl.create(:account,
:role => FactoryGirl.create(:role, :name => "student")
)
因为这显然是罗嗦,我想创建一个小的辅助方法:
def account_as(role, options = {})
FactoryGirl.create(:account,
options.merge(:role => FactoryGirl.create(:role, :name => "student"))
)
end
然后在您的测试:
let(:account) { account_as "student" }
或者,你可以只缩短了自己的角色生成,所以你可以使用它像:
def role(role, options = {})
FactoryGirl.create :role, options.merge(:name => role)
end
account = FactoryGirl.create :account, :role => role("student")