テストコード用のインスタンスを作成する際、単純にテストデータが欲しいときなどはモデルで設定されているコールバックを無視したいケースがあります。
例えば、以下のようなコールバックがモデルで設定されている場合、FactoryBotにskip/set_callback
を設定するとコールバックをスキップすることができます。(set_callbackをすることでコールバックがskipされっぱなしになることを防ぐ)
app/model/user.rb
after_save :hoge
def hoge
...
...
end
spec/factories/users.rb
FactoryBot.define do
factory :user do
email 'xxx'
...
...
+ before(:create) { User.skip_callback(:save, :after, :hoge) }
+ after(:create) { User.set_callback(:save, :after, :hoge) }
end
end