0

我正在使用 Ruby on Rails 3.2.2、FactoryGirl 3.1.0、FactoryGirlRails 3.1.0、Rspec 2.9.0 和 RspecRails 2.9.0。在我的规范文件(每个文件大约 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 个示例会减慢我的规范之后会发生什么?这种行为有原因吗?


注意 I:我尝试单独运行规范,这些都很快。

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

4

1 回答 1

0

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

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

  config.after(:each) do
    DatabaseCleaner.clean
  end
于 2012-05-09T20:28:26.087 回答