2011-11-30 54 views
4

我正在Minitest中编写一个测试用例来创建数据库条目。测试运行后,测试所做的所有更改应回滚。什么是实现这一目标的好方法?由minitest单元测试创​​建的回滚更改

require 'minitest/autorun' 
require 'rubygems' 
require 'sequel' 
require 'factory_girl' 

class TestPostgresqlFunctions < MiniTest::Unit::TestCase 
    def test_simple_function 
    Factory.find_definitions 
    user = FactoryGirl.create(:user) 
    end 
end 

使用此代码,创建的条目将保留在数据库中。我没有使用Rails或任何其他框架。我正在使用的数据库是PostgreSQL 9.1。

回答

1

这应该工作(需要续集3.29.0或更高版本):

# Use this class as the base class for your tests 
class SequelTestCase < MiniTest::Unit::TestCase 
    def run(*args, &block) 
    Sequel::Model.db.transaction(:rollback=>:always){super} 
    end 
end 
+0

看来,如果这rollsback立即将所有续集的交易。我正在寻找的是在测试(minitest)完成后回滚所有事务。 – Hartwig

+0

这会在自己的事务中运行每个测试。如果你想在自己的事务中运行每个测试套件,可能会有一个单独的方法来覆盖。阅读MiniTest源代码。 –

+0

似乎我在测试解决方案时犯了一个错误。它完美的作品。非常感谢! – Hartwig