If you use transactional_fixtures
or the
database_cleaner gem
Show archive.org snapshot
with strategy :transaction
, after_commit
callbacks will not be fired in your tests.
Rails 5+
Rails 5 has a fix Show archive.org snapshot for this issue and no further action is needed.
Rails 3, Rails 4
Add the
gem test_after_commit
Show archive.org snapshot
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).
Note:
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 after_save
callback.
If you replace an after_save
callback with an after_commit
callback this list might help you to fix your code afterwards:
-
attribute_changed?
will return true in theafter_save
callback and false in theafter_commit
callback. Use something likeprevious_changes.key?(:attribute)
instead.