当我使用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时,当测试依赖于数据库中条目的id数时,我开始出现错误。我在测试过程中查看了数据库,它从来没有清理过数据库。
如果切换到以下配置:
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
我所有的测试都通过了,但是我必须在方法测试前后调用clean?
我不应该在每次测试前后都清理数据库-对吧?我觉得我好像在某个地方误解了什么。我不明白的是什么。
最佳答案
您在非持久模式下使用了sqlite。PostgreSQL没有这样的选项,总是持久的。使用drop database/create database完成清理。