Ale*_*eth 1 unit-testing ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)
但是在控制台上:
?> 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
Run Code Online (Sandbox Code Playgroud)
您应该关闭测试用例中的事务:
class RollbackTest < ActiveSupport::TestCase
self.use_transactional_fixtures = false
Run Code Online (Sandbox Code Playgroud)
[编辑:根据@康拉德的评论应该是transactionAL]