2016-05-18 19 views
0

大きなテスト用データベースを使用しているいくつかのテストがあります。また、データベースクリーナーを使用して、各テスト後にデータベースをクリーニングしています。そして、ここで問題が起こります。私のスペックヘルパーで 私はこの引数をrspecテストの例に渡す

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

を持っている。しかし、ここで問題があります。前述のテストグループ(大きなグループ)は、この大規模なデータベースを何度も何度も繰り返し作成していきます(テストごとに1回)。時間がかかり、これらのテストではデータベースがまったく変更されないため、毎回データベースをきれいにして作成する必要はありません。

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 

をそれともそのため、他のソリューションがあります:

it 'something', argument do 
    #testing 
end 

だからスペックヘルパーで、私はこのような何かを行うことができます。

ので、このような何かをする方法があります問題?何か案は?

答えて

2

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

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

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

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

+0

正確に私が必要とするもの、そして私が探していたもの。 – ZebThan