我目前DatabaseCleaner
在运行 PostgreSQL 的 Rails 项目中使用,并将其设置如下。
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation, { pre_count: true, reset_ids: true })
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
在我的一个 Rails 测试套件中,我打印了一个实例的 id。我认为它应该是相对较小的数字,因为 clean_with(:truncate) 假设清除 db 并在其上运行真空。但每次我运行测试时它都会增加。
测试通过,它使用什么顺序都没有关系。但为什么clean_with(:truncation)
不能以应有的方式工作?
====== 编辑 ======
这在 RSpec 测试的范围内。我知道序列编号对性能没有影响,但是对每个 :suite 进行昂贵的清理 (:truncation) 并使用便宜且快速的清理 (:transaction) 会。所以我想了解为什么clean_with(:truncation)
在运行测试套件之前不为我重置 id 以获得干净的数据库状态。