могу ли я использовать несколько фильтров исключения в rspec?

#ruby #rspec #filtering

#ruby #rspec #фильтрация

Вопрос:

В файле _spec.rb я настраиваю фильтр исключения примерно так:

 RSpec.configure do |config|
  # we need determine this once at the very front
  # and the result be available in the instance
  server_success = server1_available?

  config.exclusion_filter = {
    :svr1 => lambda {|what|
      case what
      when :available
        !server_success
      end
    }
  }
end
  

а затем позже в файле, который я делаю

 describe :get_items_by_client, :svr1 => :available do
  

чтобы предотвратить выполнение теста, если сервер недоступен.

Все это отлично работает, если я запускаю файл спецификации отдельно. Однако у меня есть аналогичный код в другом файле, управляющий тестами, которые обращаются к другому серверу, и когда я запускаю их все, я вижу, что выполняется только каждая проверка сервера (у меня есть puts в коде «serverX_available?»), Но исключается только один набор тестов (хотя ни один сервер не доступен).

Я начинаю думать, что у вас может быть только один фильтр исключения, но я могу найти где угодно любые документы, которые говорят об этом. Выполнимо ли это для каждого файла? У меня мог бы быть один комплексный фильтр в файле поддержки, но тогда как бы я его включил, когда я выполняю только запуск одного файла спецификации?

В идеале я хотел бы найти форму, которая работает для каждого файла, но давайте я проведу проверку доступности один раз, поскольку это довольно дорогая проверка, и у меня есть несколько примеров в тесте, которые контролируются этим.

Ответ №1:

 config.filter_run_excluding :cost => true
config.filter_run_excluding :slow => true
  

Попробуйте это, и это сработает.