Командная строка для запуска всех примеров в RSpec, включая те, которые отфильтрованы?
Есть несколько примеров, которые являются медленными, которые отфильтровываются следующим образом:
RSpec.configure do |c|
c.filter_run_excluding slow: true
end
describe 'get averages but takes a long time', slow: true do
it 'gets average foo' do
....
end
it 'gets average bar' do
...
end
end
Это отлично работает и не запускает медленные тесты.
rspec
Но что такое команда RSpec для запуска всех примеров из командной строки, включая медленные, которые отфильтрованы?
Ответы
Ответ 1
Если вы запустите rspec --help
, вывод включает в себя следующее:
-t, --tag TAG[:VALUE] Run examples with the specified tag, or exclude examples
by adding ~ before the tag.
- e.g. ~slow
- TAG is always converted to a symbol
Вы можете запустить rspec --tag slow
, чтобы запустить все примеры с тегами как медленные; однако, это не все примеры, как вы хотите. Я не думаю, что есть простой способ получить то, что вы хотите; фильтр exclusion
был разработан для случаев, когда вы не хотели бы переопределять его в командной строке (например, на основе Ruby-версии или чего-то еще), не имеет смысла принудительно запускать спецификацию, которая не применяется к вашей рубиновая версия). Вы можете открыть основную проблему rspec, чтобы мы могли обсудить потенциальные изменения, чтобы добавить то, что вы хотите. Тем временем вы можете получить его с помощью переменных среды:
RSpec.configure do |c|
c.filter_run_excluding slow: true unless ENV['ALL']
end
При этой настройке rspec
будет запускать все спецификации, кроме медленных, и ALL=1 rspec
будет запускать все спецификации, включая медленные.
Ответ 2
Исключение медленных тестов
Если вы хотите, чтобы rake исключал медленные тесты по умолчанию, ответ Myron, вероятно, ваш лучший выбор. Это, однако, более простое решение, которое будет хорошо работать для большинства людей.
# Run all tests
rspec
# Run tests, excluding the ones marked slow
rspec --tag ~slow
Я использую guard для запуска моих тестов во время разработки. Вы можете сказать, что охранник должен исключать медленные тесты, когда он запускает все тесты. Таким образом, вы сможете запускать только быстрые тесты во время разработки, и вы можете запустить полный пакет с помощью rake
или rake --tag slow
, когда захотите. Это также отлично, потому что ваш сервер CI может запускать ваш полный пакет без необходимости знать специальные переменные ENV.
Guardfile:
guard :rspec, cli: '--drb', run_all: {cli: '--tag ~slow'} do
...
end
Guard будет продолжать медленный тест, когда вы запускаете для него часы, например, когда вы его редактируете.