数据库清理器:清理与截断
Database Cleaner: Clean vs truncation
以下有什么区别?
- DatabaseCleaner.clean_with(:截断)
- DatabaseCleaner.clean
我想弄清楚的是什么是使用数据库清理器在我的测试(性能方面)中清理 before(:all) 挂钩的最佳方法。我的 before(:all) 钩子只是创建了大量的工厂并在它们之间创建了一些关联。目前,我只是将它们全部加载到 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) 应该是什么样的?
What is the difference between the following?
- DatabaseCleaner.clean_with(:truncation)
- DatabaseCleaner.clean
区别非常简单:在第一种情况下,您告诉 DatabaseCleaner
现在使用 truncation
策略清理您的数据库,而在第二种情况下,DatabaseCleaner
将清理您的数据库数据库使用当前配置的策略。
我认为你的设置已经很不错了。由于在 before(:all)
挂钩中创建大量工厂(如您所说)非常罕见,您只需添加到该特定测试 after(:all)
挂钩即可将数据库恢复到稳定状态。
使用事务清理将不起作用,因为 before(:all)
is not wrapped 在事务中。
您在这里有 2 个选项:
after(:all) { DatabaseCleaner.with(:truncation) }
after(:all) { DatabaseCleaner.with(:deletion) }
为了在这两者之间做出选择,如 documentation clearly states,您必须衡量并选择对您来说最快的,或者如果不重要就选择一些。
以下有什么区别?
- DatabaseCleaner.clean_with(:截断)
- DatabaseCleaner.clean
我想弄清楚的是什么是使用数据库清理器在我的测试(性能方面)中清理 before(:all) 挂钩的最佳方法。我的 before(:all) 钩子只是创建了大量的工厂并在它们之间创建了一些关联。目前,我只是将它们全部加载到 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) 应该是什么样的?
What is the difference between the following?
- DatabaseCleaner.clean_with(:truncation)
- DatabaseCleaner.clean
区别非常简单:在第一种情况下,您告诉 DatabaseCleaner
现在使用 truncation
策略清理您的数据库,而在第二种情况下,DatabaseCleaner
将清理您的数据库数据库使用当前配置的策略。
我认为你的设置已经很不错了。由于在 before(:all)
挂钩中创建大量工厂(如您所说)非常罕见,您只需添加到该特定测试 after(:all)
挂钩即可将数据库恢复到稳定状态。
使用事务清理将不起作用,因为 before(:all)
is not wrapped 在事务中。
您在这里有 2 个选项:
after(:all) { DatabaseCleaner.with(:truncation) }
after(:all) { DatabaseCleaner.with(:deletion) }
为了在这两者之间做出选择,如 documentation clearly states,您必须衡量并选择对您来说最快的,或者如果不重要就选择一些。