Jsh*_*523 3 rspec ruby-on-rails capybara database-cleaner
以下有什么区别?
我想弄清楚的是使用数据库清理程序清理我的测试中的before(:all)钩子(性能明智)的最佳方法是什么.我之前的(:all)钩子只是创建了大量的工厂并在它们之间创建了一些关联.目前,我只是将它们全部加载到之前(:每个),不必担心之后的清理.
我目前的策略如下:
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
Run Code Online (Sandbox Code Playgroud)
所以除了我之前的问题,我的追求(:all)应该是什么样的?
以下有什么区别?
- DatabaseCleaner.clean_with(:截断)
- DatabaseCleaner.clean
差别非常简单:在第一种情况下,您要告诉DatabaseCleaner现在使用truncation策略清理数据库,在第二种情况下,DatabaseCleaner将使用当前配置的策略清理数据库.
我认为你的设置已经非常好了.由于在before(:all)钩子中创建大量工厂(如你所说)是非常罕见的,你只需要添加到特定的测试after(:all)钩子以使db恢复到稳定状态.
使用事务清理不起作用,因为事务中before(:all) 没有包装.你有两个选择:
after(:all) { DatabaseCleaner.with(:truncation) }
after(:all) { DatabaseCleaner.with(:deletion) }
为了在这两者之间做出选择,正如文档明确指出的那样,你必须衡量和选择最适合你的东西,或者只要选择一些无关紧要的东西.
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |