0

大きなテストデータベースを使用しているいくつかのテストがあります。また、Database Cleaner を使用して、各テスト後にデータベースをクリーンアップしています。そして、ここで問題が発生します。私のスペックヘルパーにはこれがあります

config.around(:each) do |example|
  MongoLib.new(database: "#{Rails.env}_sensor_data").drop_tables!
  DatabaseCleaner.cleaning do
    example.run
  end
end

しかし、ここで問題です。上記のテストのグループ (大きなグループ) は、この大きなデータベースを何度も (テストごとに 1 回) 生成してドロップします。これには長い時間がかかり、これらのテストではデータベースがまったく変更されないため、毎回データベースをクリーンアップして作成する必要はありません。

それで、このようなことをする方法はありますか:

it 'something', argument do
  #testing
end

したがって、仕様ヘルパーでは、次のようなことができます。

config.around(:each) do |example|
MongoLib.new(database: "#{Rails.env}_sensor_data").drop_tables!
  if example.argument?
    DatabaseCleaner.cleaning do
      example.run
    end
  end
end

それとも、その問題に対する他の解決策がありますか?何か案は?

4

1 に答える 1

2

あなたは正しい考えを持っています。around フックの各exampleオブジェクトにmetadataは、ハッシュを返すメソッドがあります。そのため、クリーナーを実行するテストにタグを付けて、フックでそのタグを探すことができます。このようなもの:

it "does something", :db_clean do
  # ...
end

config.around(:each) do |example|
  if example.metadata[:db_clean]
    # ...
  else
    # ...
  end
end

これらのフィルターの詳細については、こちらをご覧ください。

于 2016-05-18T14:09:41.950 に答える