ActiveRecord回滚在Rails测试中不起作用

时间:2010-09-23 01:10:58

标签: ruby-on-rails unit-testing rollback

抛出ActiveRecord :: Rollback,但不在测试中。

之前我遇到过这个问题,我现在又有了这个问题,并且由于某些原因找不到其他人遇到此问题的记录。

我这是因为每次测试运行时测试都会执行回滚,并且大多数数据库不支持嵌套的rolllback。但是,我不能成为唯一一个涉及事务回滚的测试用例的人,所以也许我做错了。

以下测试用例失败(使用shoulda库,尽管相同的测试失败,基本的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

然而在控制台上:

?> 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

2 个答案:

答案 0 :(得分:8)

您应该关闭测试用例中的事务:

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

[编辑:根据@康拉德的评论,它应该是transactionAL]

答案 1 :(得分:2)

实际上调用的方法如下:

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

不是self.use_transaction_fixtures(注意缺少'al')