Rails数据库测试和清除

时间:2011-09-21 16:51:44

标签: ruby-on-rails-3 unit-testing model

让我们想象一下:

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 个答案:

答案 0 :(得分: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行 - 将其设置为true会导致交易错误中的事务(至少对于sqlite数据库而言。)