#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
Попробуйте это, и это сработает.