2011-09-21 101 views
3

让我们想象一下:Rails的数据库测试和清除

class ModTest < ActiveSupport::TestCase 
    test "something" do 
    m1 = Mod.new 
    # test some things 
    assert m1.save 
    end 

    test "whatever" do 
    m2 = Mod.new 
    # test other things 
    assert m2.save 
    end 
end 

第二测试用例被执行之前,一个叫whatever,将数据库中清除,或者将它包含由第一个测试用例添加的对象? 这种行为可以被控制/定制吗?

回答

1

不是100%确定默认行为是什么,我一直在使用database_cleaner gem来达到这个目的。下面是我的spec_helper.rb相关代码:

require 'database_cleaner' 

RSpec.configure do |config| 

    # Truncated for brevity 

    config.before :suite do 
    DatabaseCleaner.strategy = :transaction 
    DatabaseCleaner.clean_with :truncation 
    end 

    config.before :each do 
    DatabaseCleaner.start 
    end 

    config.after :each do 
    DatabaseCleaner.clean 
    end 
end 

一个警告,如果你走这条路,确保你走了config.use_transactional_fixtures线在默认spec_helper.rb如果你使用事务清洗策略 - 离开它设置为真正原因事务内部事务错误(至少对于sqlite数据库)。

相关问题