以下有什么区别?

  • DatabaseCleaner.clean_with(:truncation)
  • DatabaseCleaner.clean

  • 我想弄清楚的是在我的测试(性能方面)中使用数据库清理器清理 before(:all) 钩子(Hook)的最佳方法是什么。我的 before(:all) 钩子(Hook)只是创建了大量的工厂并在它们之间创建了一些关联。目前,我只是在 before(:each) 中加载它们,而不必担心之后的清理。

    我目前的策略如下:
    RSpec.configure do |config|
      config.use_transactional_fixtures = false
    
      config.before(:suite) do
        DatabaseCleaner.clean_with(:truncation)
      end
    
      config.before(:each) do |example|
        DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
        DatabaseCleaner.start
      end
    
      config.after(:each) do
        DatabaseCleaner.clean
      end
    

    所以除了我之前的问题,我的 after(:all) 应该是什么样的?

    最佳答案


    区别非常简单:在第一种情况下,您告诉 DatabaseCleaner 现在使用 truncation 策略清理您的数据库,而在第二种情况下,DatabaseCleaner 将使用当前配置的策略清理您的数据库。
    我觉得你的设置已经很不错了。由于在 before(:all) 钩子(Hook)中创建大量工厂(如您所说)非常罕见,您只需要添加到特定的测试 after(:all) 钩子(Hook)即可将数据库恢复到稳定状态。
    使用事务清理将不起作用,因为事务中的 before(:all) is not wrapped
    您在这里有 2 个选择:

  • after(:all) { DatabaseCleaner.with(:truncation) }
  • after(:all) { DatabaseCleaner.with(:deletion) }

  • 为了在这两者之间进行选择,如 documentation clearly states ,您必须衡量并选择对您来说最快的,或者如果无关紧要就选择一些。

    关于ruby-on-rails - 数据库清理器 : Clean vs truncation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32669946/

    10-12 00:17
    查看更多