让我们想象一下:
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
的数据库将被清除,还是包含第一个测试用例添加的对象?可以控制/自定义此行为吗?
最佳答案
不能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数据库而言)。
关于ruby-on-rails-3 - Rails数据库测试和清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7503592/