如何在 factory_girl 的上下文中创建模型?
How to create models in context with factory_girl?
在我的模型中,我进行了一些上下文验证:
class User
validate :permissions, on :admin
def permissions
error.add(:permissions, 'Must be set as admin') unless permissions.include? :admin
end
end
而且用法很简单:
user.save(context: :admin)
问题是:如何通过 factory_girl 在 admin
上下文中检查验证是否 运行?例如。 create :user, context: :admin
无效。
我不认为 factory_girl 提供了使用该选项 create
或 save
的方法。但是,您可以使用 factory_girl 的 build
来解决这个问题
FactoryGirl.build(:user).save!(context: :admin)
或attributes_for
:
User.create!(FactoryGirl.attributes_for(:user), context: :admin)
FactoryBot 提供了一个 to_create
方法,可以像这样使用:
FactoryBot.define do
factory :user do
trait :admin do
to_create { |instance| instance.save!(context: :admin) }
end
end
end
或没有 trait
:
FactoryBot.define do
factory :user do
to_create { |instance| instance.save!(context: :admin) }
end
end
By default, creating a record will call save!
on the instance; since
this may not always be ideal, you can override that behavior by
defining to_create
on the factory:
factory :different_orm_model do
to_create { |instance| instance.persist! }
end
在我的模型中,我进行了一些上下文验证:
class User
validate :permissions, on :admin
def permissions
error.add(:permissions, 'Must be set as admin') unless permissions.include? :admin
end
end
而且用法很简单:
user.save(context: :admin)
问题是:如何通过 factory_girl 在 admin
上下文中检查验证是否 运行?例如。 create :user, context: :admin
无效。
我不认为 factory_girl 提供了使用该选项 create
或 save
的方法。但是,您可以使用 factory_girl 的 build
FactoryGirl.build(:user).save!(context: :admin)
或attributes_for
:
User.create!(FactoryGirl.attributes_for(:user), context: :admin)
FactoryBot 提供了一个 to_create
方法,可以像这样使用:
FactoryBot.define do
factory :user do
trait :admin do
to_create { |instance| instance.save!(context: :admin) }
end
end
end
或没有 trait
:
FactoryBot.define do
factory :user do
to_create { |instance| instance.save!(context: :admin) }
end
end
By default, creating a record will call
save!
on the instance; since this may not always be ideal, you can override that behavior by definingto_create
on the factory:
factory :different_orm_model do
to_create { |instance| instance.persist! }
end