Поймать 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
).
затем вы можете проверить значение $? чтобы узнать, нужно ли вам повторить попытку или нет
Я понял, что ошибка за пределами примеров означает, что все примеры будут иметь статус ошибки "неизвестно" и ни один с "пройдено"
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