Поймать RSpec "ошибка произошла за пределами примера"

У меня есть собственный скрипт, который позволяет мне повторить неудачные примеры, если есть несколько неудачных примеров.

Он основан на сканировании списка неисправных спецификаций для определения количества отсутствующих спецификаций. Тем не менее, я только что обнаружил, что у меня есть большой ложный положительный результат, когда спецификации даже не запускались из-за "ошибки произошли за пределами примера"

Вот как выглядит мой скрипт

bundle exec rspec [...] --failure-exit-code 0 # I use 0 exit code to check whether specs all passed in one go or not.
failures_count=$(grep -o "failed" rspec_persistence.txt | wc -l)
if [ "$failures_count" -eq "0" ]
then
  exit 0
fi
# Last part of the code retries failed specs

Дело в том, что код завершения ошибки RSpec равен 1, независимо от того, вызваны ли они ошибочными спецификациями или "ошибки произошли вне примеров"

1 ответ

На случай, если вы погуглите здесь. У меня только что был принят PR в rspec, так что вы можете предоставить--error-exit-code в команду rspec, которая будет возвращена в случае сбоя за пределами примеров (чтобы дополнить существующие --failure-exit-code).

затем вы можете проверить значение $? чтобы узнать, нужно ли вам повторить попытку или нет

https://github.com/rspec/rspec-core/pull/2749

Я понял, что ошибка за пределами примеров означает, что все примеры будут иметь статус ошибки "неизвестно" и ни один с "пройдено"

cat rspec_persistence.txt
example_id                                                                               | status  | run_time     |
---------------------------------------------------------------------------------------- | ------- | ------------ |
  ./spec/services/foo_spec.rb[1:1:1]               | unknown |              |

Таким образом, следующий код будет работать

# Avoid passing if no specs were ran (most likely indicate a "errors occured outside of examples")
passed_count=$(grep -o "passed" rspec_persistence.txt | wc -l)
if [ "$passed_count" -eq "0" ]
then
  exit 1
fi
Другие вопросы по тегам