什么会减慢我的规格?

时间:2012-05-08 16:10:30

标签: ruby-on-rails ruby ruby-on-rails-3 testing rspec

我正在使用Ruby on Rails 3.2.2,FactoryGirl 3.1.0,FactoryGirlRails 3.1.0,Rspec 2.9.0和RspecRails 2.9.0。在我的spec文件(每个文件大约1300个示例)中,在每个示例运行之前,我为数据库播种并使用工厂创建和存储少量记录:

# spec/spec_helper.rb

config.before(:suite) do
  # Cleans the database.
  DatabaseCleaner.strategy = :transaction
  DatabaseCleaner.clean_with(:truncation)

  # Seeds the database.
  load "#{Rails.root}/db/seeds.rb"
end

我想知道为什么,当我在终端窗口中运行rspec ./spec/models/my_model_spec.rb命令时,我的规格 开始快速运行 但稍后(也就是说,在运行了大约300个示例之后)那些 慢慢地 。我的例子非常简单,在性能方面几乎相同:

it "can not update title" do
  @article.update_attribute(:title, "Sample title").should be_false
end

经过一定数量的测试后,上述示例需要20/30秒才能完成(!),有时也需要60/120秒(!!!)。

在运行大约300个示例之后会发生什么?如果这些示例非常简单并且在性能方面几乎相同,那么这些示例会减慢我的规格?这种行为有理由吗?


注意我:我试图孤立地运行规范,这些都很快。

注意II :当我在我的“活动监视器”中运行规范ruby进程时(我正在使用运行Snow Leopard 10.6.8的Mac OS X)去使用100%快速的CPU。

1 个答案:

答案 0 :(得分:0)

在每个示例后尝试清理数据库。把它放在你的rspec_helper配置块中:

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end