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 : 仕様を分離して実行しようとしましたが、それらはすべて高速です。

注 II : ruby「Activity Monitor」で特定のプロセスを実行すると (Snow Leopard 10.6.8 を実行している Mac OS X を使用しています)、CPU をすぐに 100% 使用するようになります。

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 に答える