红宝石 – Rspec,黄瓜:最佳速度数据库清洁策略

前端之家收集整理的这篇文章主要介绍了红宝石 – Rspec,黄瓜:最佳速度数据库清洁策略前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想提高我的测试速度.

>我应该使用use_transactional_fixtures还是使用database_cleaner gem?
哪个database_cleaner策略是最好的?我注意到迁移后:截断到:事务我的800多个例子运行速度快了4倍!
>当我使用database_cleaner:transaction时应该关闭use_transactional_fixture?
>对于rack_test来说最好的策略是:事务是真的吗?
>从“交易”到“更改战略”的最佳做法是什么?使用硒或akephalos时截断?

附: MysqL,Rails 3,Rspec2,Cucumber

P.P.S.我知道sporkparallel_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

猜你在找的MsSQL相关文章