specify 'Test' do
Foo.create
expect( Foo.count ).to eq 1
expect{ ActiveRecord::Base.connection.execute( 'invalid sql' )}
.to raise_error ActiveRecord::StatementInvalid
ActiveRecord::Base.connection.execute 'ROLLBACK'
expect( Foo.count ).to eq 1
end
这会导致以下失败:
Failure/Error: expect( Foo.count ).to eq 1
expected: 1
got: 0
引发StatementInvalid
错误后,App.all返回一个空数组。因此,似乎错误已经毒害了未来的AR DB呼叫。
这个错误来自哪里?有没有办法重置AR连接来解决这个问题?
ActiveRecord 4.1.7和PostgreSQL。
答案 0 :(得分:1)
通常,保存过程包含在事务中,最外面的保存(如果保存回调,关联等执行更多数据库更新)在提交时提交事务。
在测试中,通常不会发生这种情况:事务用于防止单个测试更改数据库(rails内置了对此的支持,而且database_cleaner gem也很受欢迎)。您的手册'回滚'声明因此回滚你的创建电话。