我正在使用rspec(3.5)来运行我的测试并使用它构建CLI。目前正在考虑耙。在我的CLI中,我希望它能够找到我的spec文件夹中的所有可用标签,并将其作为运行RSPEC之前的测试选项提供。
我一直在窥探spec_helper并且无法找到标签信息。我的理解是,rspec CLI本身接受所有标记作为输入,然后遍历所有文件以查看它们是否与标记匹配,如果匹配,则rspec将运行它们。
我想扭转这个工作流程 -
现在我停留在第1步,找到所有标签。 假设,如何在不运行测试的情况下扫描所有spec文件夹,并在某处公开标记?
摘自我的代码。 “:api”是我所指的标签。
describe 'Oh Title: Oh after title', :api, :data_key => "Oh my meta_data", :feature => "Oh my feature" do
it 'oh my explanation' :data_key=> 'oh my meta_data' do |e|
#blah blah#
end
end
答案 0 :(得分:0)
如果您正在遵循rspec文档中列出的哈希火箭语法,那么这样的事情可能会有效:
grep -ri "it \"" * | grep "=>" | awk -F'=>' '{print $1}' | awk '{print $NF}' | uniq
打破它:
grep -ri "it \"" *
将提取包含it "
grep "=>"
将过滤为仅标记的测试awk -F'=>' '{print $1}'
将在哈希火箭之前提取所有内容awk '{print $NF}'
只会提取标记uniq
只会打印唯一标记答案 1 :(得分:0)
我知道这大约晚了2年,但是我和你在同一地点。这就是我所做的。
自定义rspec格式化程序
# spec/support/formatters/ci_rspec_run_files.rb
module Formatters
class CiRspecRunFiles
RSpec::Core::Formatters.register self, :example_started
def initialize(output)
@output = output
end
def example_started(notification)
@output << "#{notification.example.id}\n"
end
end
end
运行
$ rspec --dry-run --tag ci:flakey --require ./spec/support/formatters/ci_rspec_run_files.rb -f Formatters::CiRspecRunFiles --out tmp/flakey_specs.txt
结果
$ cat tmp/flakey_specs.txt
./spec/models/flakey_spec.rb[1:3:6:4:1]