Rails < 5: How to get after_commit callbacks fired in tests
If you use
transactional_fixtures or the database_cleaner gem with strategy
after_commit callbacks will not be fired in your tests.
Rails 5 has a fix for this issue and no further action is needed.
Add the gem test_after_commit to your
test group in the Gemfile and you are done. You don't need to change the database strategy to
deletion (which might lead to longer test runs).
Most often a
after_commit is the only right choice. Sending emails, performing async sidekiq workers and many things more are kind of broken with an
Things which will break if you replace an
after_save with an
attribute_changed?will return true in the
after_savecallback and false in the
after_savecallback. Use something like