Rails minitest, database cleaner how to turn use_transactional_fixtures = false

前端 未结 1 917
醉梦人生
醉梦人生 2021-01-23 00:32

i would like to disable use_transactional_fixtures = false in ministest to catch after_commit callback. What and where should i set-up?

1条回答
  •  清歌不尽
    2021-01-23 01:08

    You have a few options. One is to create a test without transactional fixtures and hope that the changes you make to the test database isn't going to break any other tests.

    class SomethingTest < ActiveSupport::TestCase
      self.use_transactional_fixtures = false
    
      def test_something_with_after_commit
        # do work here, which will change your test database
      end
    end
    

    Another option you have is to keep the transactional fixtures, but invoke the after_commit callback manually.

    class SomethingTest < ActiveSupport::TestCase
      def test_something_with_after_commit
        something = Something.new
        something.save
        something.after_commit
        # verify things happened as expected
      end
    end
    

    And yet another option is to move the logic out of the after_commit callback into a new object, where you can write proper tests for it without relying on the callbacks to be invoked.

    0 讨论(0)
提交回复
热议问题