ActiveRecord Rollback在Rails测试中不起作用

抛出ActiveRecord :: Rollback可以正常工作,但不能在测试中使用。

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

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

以下测试用例失败(使用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 

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

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

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

实际上调用的方法如下:

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

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