当我使用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完成清理。

09-30 00:02