how to skip callback in rspec

當寫了一個 callback 導致整個 spec 爆炸時,可以使用 skip_callback method 讓 spec 恢復正常

# model
after_commit :generate_zip
#factory
after :build do |post|
  post.class.skip_callback(:commit, :after, :generate_zip, raise: false) 
end

如果要針對該 callback 進行測試時,可以

# factory
factory :post_with_generate_zip do
  after :create do |post|
    post.send(:generate_zip)
  end
end

用法

create(:post_with_generate_zip)

參考資料