Как заставить запускать все спецификации RSpec, игнорируя: тег фокуса
Учитывая следующую конфигурацию RSpec (v2.12.0):
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
Иногда люди забывают удалить тег :focus
из спецификаций и в среде непрерывной интеграции, где мы хотим, чтобы все спецификации запускались, запускаются только спецификации с оставшимся тегом :focus
.
Я пробовал:
rspec --tag ~focus
... который запускает все спецификации, исключая те, отмеченные: focus
Есть ли способ заставить run ВСЕ спецификации игнорировать любые теги с помощью параметров командной строки rspec?
Ответы
Ответ 1
Вы можете удалить строки:
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
и попросите пользователей запустить сфокусированные тесты с помощью rspec --tag focus
. Таким образом, CI всегда будет запускать полный набор тестов.
Возможно, вы захотите проверить среду в блоке конфигурации и включить/исключить настройку filter_run
.
Другая мысль: если вы используете git, установите привязку до фиксации, чтобы в первую очередь не включать спецификации с :focus
из базы данных.
Ответ 2
Я просто добавил это в проект:
config.before :focused => true do
fail "Hey dummy, don't commit focused specs." if ENV['FORBID_FOCUSED_SPECS']
end
И в script, который работает наш сервер непрерывной интеграции:
export FORBID_FOCUSED_SPECS=true
Ответ 3
Попробуйте: rspec --tag focus --tag ~focus
Ответ 4
Я хотел автоматически сбой на нашем сервере непрерывной интеграции, когда был установлен фокус. Это было переписано на основе code из myronmarston для правильной работы с rspec-rails 3.2.0:
config.before(:example, :focus) do
fail 'This example was committed with `:focus` and should not have been'
end if ENV['CI']