我遇到了一个熟悉的问题,我想在使用FactoryBot
创建记录时跳过回调,但是这里发布的答案并没有解决我的问题,所以我找到了自己的解决方案,并在这里发布,希望对其他人有用。
类
class User < ApplicationRecord
before_save :verify
end
工厂
FactoryBot.define do
factory :user do
transient do
skip_verify_callback { true }
end
before(:create) do |user, evaluator|
user.class.skip_callback(:save, :before, :verify) if evaluator.skip_verify_callback
end
after(:create) do |user, evaluator|
user.class.set_callback(:save, :before, :verify) if evaluator.skip_verify_callback
end
end
end
注意:上面的创建回调仅在FactoryBot.create
之后运行,因此FactoryBot.build
不会触发这些回调。
我将工厂的默认行为设置为跳过验证回调,但我仍然可以通过像这样创建带有参数的用户来防止这种情况:
FactoryBot.create(:user, skip_verify_callback: false)
我认为这种方法更安全,因为FactoryBot.create
开始和结束都很快,我们不会有任何跳过回调的副作用。
Model.skip_callback(...)
。 - Kevin Sylvestre