如何在 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 提供了使用该选项 createsave 的方法。但是,您可以使用 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

From the docs:

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