4

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

当然,当您使用事务性固定装置时实际上不会发生任何提交,因此在 Rails 3 中有这个补丁:https ://gist.github.com/charleseff/1305285,它被制作成一个 gem:'test_after_commit'

Rails 4 对 active_record 的内部结构进行了足够的更改,以至于 Rails 3 补丁无法移植。

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

4

1 回答 1

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

于 2013-03-15T07:38:53.313 回答