ActiveRecord Rollback does not work in Rails test

╄→гoц情女王★ 提交于 2019-11-28 06:33:34

问题


Throwing ActiveRecord::Rollback works, but not in tests.

I've had this problem before, am now having it again, and for some reason can't find any record of someone else having this problem.

I'm this is because tests do a rollback each time a test runs, and most databases don't support nested rolllbacks. However, I can't be the only person with test cases that involve a transaction rollback, so perhaps I am doing something wrong.

The following test case fails (uses shoulda library, though the same test fails with basic Test::Unit):

require 'test_helper'

class RollbackTest < ActiveSupport::TestCase
  context "create a record and throw rollback" do
    setup do
      User.transaction do
        User.create!
        raise ActiveRecord::Rollback
      end
    end

    should_not_change("count of users") { User.count }
  end
end

however on the console:

?> User.transaction do
?>         User.create!
>>         raise ActiveRecord::Rollback
>>       end
=> nil
>> User.count
=> 4
>> User.transaction do
?>         User.create!
>>         raise ActiveRecord::Rollback
>>       end
=> nil
>> User.count
=> 4

回答1:


You should turn off transactions in your test case:

class RollbackTest < ActiveSupport::TestCase
  self.use_transactional_fixtures = false

[edit: as per @Conrad's comment it should be transactionAL]




回答2:


Actually the method to call is as follows:

class RollbackTest < ActiveSupport::TestCase
  self.use_transactional_fixtures = false

not self.use_transaction_fixtures (note the missing 'al')



来源:https://stackoverflow.com/questions/3774742/activerecord-rollback-does-not-work-in-rails-test

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!