【发布时间】:2017-10-04 12:08:54
【问题描述】:
刚从sqlite 用于测试切换到pg。我注意到,虽然测试表清除得很好,但 ID 不会重新开始为 1。换句话说,给定测试:
describe "" do
before do
# some dummy is created
Object.create()
puts "count = #{Object.count}"
puts "last object_id = #{Object.id}"
end
...
end
如果您运行许多测试,您将获得以下输出:
count = 1
last object_id = 1
count = 1
last object_id = 2
count = 1
last object_id = 3
count = 1
last object_id = 4
而我觉得最好同时清除测试表并重新启动 ID,以便:
count = 1
last object_id = 1
count = 1
last object_id = 1
count = 1
last object_id = 1
count = 1
last object_id = 1
我认为这只是我的spec_helper 文件中需要的东西?作为参考,下面的当前帮助文件,我正在使用database_cleaner gem。谢谢!
RSpec.configure do |config|
# Database cleaner set up below
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
# Clean up all jobs specs with truncation
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
【问题讨论】:
-
通常,对象的id与实际测试无关,因此不需要重新设置自增。
-
您确定您正在使用截断策略运行测试吗?我希望您的测试标题中出现
describe "", js:true之类的内容,因此我怀疑您可能正在使用事务策略运行测试。您可以在测试运行时显示测试日志吗?在那里你应该清楚地看到它是进行事务ROLLBACK还是截断。
标签: ruby-on-rails ruby postgresql rspec database-cleaner