Bash 捕获RSpec“;错误发生在“示例”之外;

Bash 捕获RSpec“;错误发生在“示例”之外;,bash,rspec,continuous-integration,ruby-on-rails-5,rspec3,Bash,Rspec,Continuous Integration,Ruby On Rails 5,Rspec3,我有一个自定义脚本,它允许我在失败的例子很少的情况下重试失败的例子 它基于扫描失败规范列表以提取缺失规范的数量。然而,我刚刚发现,我有一个很大的假阳性,当规格甚至没有开始,因为“错误发生在示例之外” 下面是我的脚本的样子 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

我有一个自定义脚本,它允许我在失败的例子很少的情况下重试失败的例子

它基于扫描失败规范列表以提取缺失规范的数量。然而,我刚刚发现,我有一个很大的假阳性,当规格甚至没有开始,因为“错误发生在示例之外”

下面是我的脚本的样子

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,无论这是由于失败的规范还是“示例之外发生的错误”

我意识到示例之外的错误意味着所有示例的故障状态都为“未知”,没有“通过”

所以下面的代码可以工作

# 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

以防你用谷歌搜索到这里。我刚刚让rspec接受了一个pr,这样您就可以向rspec命令提供一个
--error exit code
,如果在示例之外出现故障,将返回该命令(以补充现有的
--failure exit code

然后可以检查$的值?查看是否需要重试

# 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