在运行测试之前查找Rspec中的所有标记

时间:2016-12-08 20:56:38

标签: ruby-on-rails ruby rspec reverse-engineering

我正在使用rspec(3.5)来运行我的测试并使用它构建CLI。目前正在考虑耙。在我的CLI中,我希望它能够找到我的spec文件夹中的所有可用标签,并将其作为运行RSPEC之前的测试选项提供。

我一直在窥探spec_helper并且无法找到标签信息。我的理解是,rspec CLI本身接受所有标记作为输入,然后遍历所有文件以查看它们是否与标记匹配,如果匹配,则rspec将运行它们。

我想扭转这个工作流程 -

  1. 查找我的spec文件夹中的所有标签。
  2. 在我的rake cli中提供它作为选项。
  3. 允许用户选择标签并运行它。
  4. 现在我停留在第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
    

2 个答案:

答案 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]