当我使用sqlite时,此配置工作正常:
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
controller.stub(:should_navigate_user?).and_return(false) rescue ""
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
当我切换到PostgreSQL时,当测试依赖于数据库中的条目数时,我开始收到错误。我在测试期间查看了数据库,但从未清理过数据库。
如果我切换到以下配置:
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.clean
controller.stub(:should_navigate_user?).and_return(false) rescue ""
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
我的所有测试都通过了,但在方法测试之后,我必须在和之前调用干净?
我不应该在每次测试之前和之后清理数据库 - 对吗?我觉得我在某处误解了某些东西。我没理解什么。
答案 0 :(得分:3)
我正在使用postgres与数据库清理器。它现在运作良好,但我记得起初遇到麻烦。我在下面粘贴了我的配置。您可以将其粘贴到spec_helper.rb或其他文件中,例如/support/database_cleaner.rb
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
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
还要确保在spec_helper中关闭事务处理夹具:
config.use_transactional_fixtures = false
答案 1 :(得分:1)
您在非持久模式下使用了sqlite。 PostgreSQL没有这样的选项,总是持久的。使用drop database / create database来完全清理它。