在Rails 4中测试after_commit挂钩,启用事务夹具

时间:2013-03-15 06:48:40

标签: ruby-on-rails activerecord rspec rspec2

我有一个Rails 4应用程序并且正在使用事务性装置,并希望在运行我的集成规范时触发我的after_commit挂钩。

当然,当你使用事务性工具时,实际上没有提交,所以在Rails 3中有这个补丁:https://gist.github.com/charleseff/1305285,它被制成一个gem:'test_after_commit'

Rails 4已经足够改变了active_record的内部,因此无法移植Rails 3补丁。

有人在Rails 4中解决了这个问题吗?

1 个答案:

答案 0 :(得分:3)

我通过在spec / support / helpers / test_after_commit.rb中添加以下代码来解决这个问题

require 'active_record/connection_adapters/abstract/transaction'
module ActiveRecord
  module ConnectionAdapters
    class SavepointTransaction < OpenTransaction
      def perform_commit_with_transactional_fixtures
        commit_records if number == 1
        perform_commit_without_transactional_fixtures        
      end

      alias_method_chain :perform_commit, :transactional_fixtures
    end
  end
end

https://gist.github.com/cmaitchison/5168104