红宝石 – Rspec,黄瓜:最佳速度数据库清洁策略
我想提高我的测试速度.
>我应该使用use_transactional_fixtures还是使用database_cleaner gem? 附: Mysql,Rails 3,Rspec2,Cucumber P.P.S.我知道spork和parallel_test并使用它们.但他们是偏执的.例如,Spork在整个套件运行时保存大约15-20秒,但是从:事务更改为:截断大大增加了运行时间从3.5分钟到13.5分钟(10分钟差异). 解决方法1.,2.& 4.如果您使用capybara的默认引擎rack_test,则应使用事务(或者使用use_transactional_fixtures或database_cleaner gem中的事务支持).正如你所说,使用交易比使用截断策略要快得多.但是,当数据库写入可以通过不同的线程(如selenium)时,事务将无法正常工作.因此,您需要使用截断(或强制所有内容通过一个数据库线程 – 另一个选项).是的,您应该在使用database_cleaner gem时关闭use_transactional_fixtures,因为gem本身支持事务.如果只需要事务,那么只需使用_transactional_fixtures,从不加载database_cleaner gem. 5.以下代码将在之间切换:事务和截断. (用rspec,capybara,rails3测试) 特点这应该给你最好的两个世界.当您不需要测试JavaScript内容时,rack_test的速度和硒的灵活性. 此外,此代码在需要重新填充种子数据的情况下负责重新填充种子数据(此方法假定您使用seed.rb加载种子数据 – 与当前约定一样). 将以下代码添加到spec_helper. config.use_transactional_fixtures = false RSpec.configure do |config| config.before(:suite) do require "#{Rails.root}/db/seeds.rb" end config.before :each do if Capybara.current_driver == :rack_test DatabaseCleaner.strategy = :transaction else DatabaseCleaner.strategy = :truncation end DatabaseCleaner.start end config.after(:each) do if Capybara.current_driver == :rack_test DatabaseCleaner.clean else DatabaseCleaner.clean load "#{Rails.root}/db/seeds.rb" end end end 感谢Jo Liss指点路. PS:如何切换驱动程序 上面的解决方案假设你已经知道如何快速切换驱动程序.如果有人来这里不行,这是怎么回事? 如上所述,假设您通常会使用默认的capybara驱动程序rack_test,但需要使用selenium来测试一些Ajaxy的东西.当你想使用selenium驱动程序使用:js =>对于Rspec或黄瓜,分别为true或@javascript.例如: Rspec示例: describe "something Ajaxy",:js => true do 黄瓜例子: @javascript Scenario: do something Ajaxy (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |