2016-05-18 2 views
0

У меня есть несколько тестов, в которых используется большая тестовая база данных. Я также использую Database Cleaner для очистки базы данных после каждого теста. И здесь возникает проблема. В моей спецификации помощника я этоПередача аргумента в пример теста rspec

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

Но вот проблема. Указанная группа тестов (большая группа) генерирует и отбрасывает эту большую базу данных снова и снова (один раз для каждого теста). Это занимает много времени, и эти тесты вообще не меняют базу данных, поэтому я не хочу каждый раз очищать и создавать базу данных.

Итак, есть ли способ сделать что-то вроде этого:

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 

Или, может быть, есть другое решение для этого проблема? Есть идеи?

ответ

2

У вас есть правильная идея. Каждый объект 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

Смежные вопросы