让我们想象一下:
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
的测试用例将清除数据库,还是包含第一个测试用例添加的对象?
这种行为可以控制/定制吗?
答案 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数据库而言。)