2016-05-18 11 views
0

Ich habe einige Tests, die eine große Testdatenbank verwenden. Ich benutze auch Datenbank-Reiniger, um die Datenbank nach jedem Test zu säubern. Und hier kommt das Problem. In meinem spec Helfer Ich habe dieseArgument an ein rspec Testbeispiel übergeben

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

Aber hier ist das Problem. Die genannte Gruppe von Tests (eine große Gruppe) generiert und löscht diese große Datenbank immer wieder (einmal für jeden Test). Das dauert lange, und diese Tests ändern die Datenbank überhaupt nicht, daher möchte ich die Datenbank nicht jedes Mal sauber machen und neu erstellen.

So ist es eine Möglichkeit, so etwas zu tun:

it 'something', argument do 
    #testing 
end 

So in dem spec Helfer ich so etwas tun kann:

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 

Oder vielleicht gibt es andere Lösung für die Problem? Irgendwelche Ideen?

Antwort

2

Sie haben die richtige Idee. Jedes example Objekt in Ihrem around-Hook hat die -Methode, die einen Hash zurückgibt. Sie können also die Tests markieren, mit denen Sie den Cleaner ausführen möchten, und nach diesem Tag in Ihrem Hook suchen. Etwas wie folgt aus:

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

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

Sie können mehr über diese here Filter lernen.

+0

Genau das, was ich brauche, und genau das, was ich gesucht habe. – ZebThan