Ruby on rails 在运行测试之前,在Rspec中查找所有标记

Ruby on rails 在运行测试之前,在Rspec中查找所有标记,ruby-on-rails,ruby,rspec,reverse-engineering,Ruby On Rails,Ruby,Rspec,Reverse Engineering,我正在使用rspec(3.5)运行测试,并使用它构建CLI。目前正在考虑rake。在我的CLI中,我希望它能够找到我的spec文件夹中可用的所有标记,并在运行RSPEC之前提供它作为测试运行的选项 我一直在窥探spec_helper,但没有找到标签信息。我的理解是,rspec CLI本身接受所有标记作为输入,然后遍历所有文件以查看它们是否与标记匹配,如果匹配,rspec将运行它们 我想反转此工作流- 在“我的等级库”文件夹中查找所有标记 将其作为我的rake cli中的一个选项提供 允许用户选择

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

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

我想反转此工作流-

  • 在“我的等级库”文件夹中查找所有标记
  • 将其作为我的rake cli中的一个选项提供
  • 允许用户选择标记并运行它
  • 现在我被困在第一步,找到所有的标签。 假设,我如何在不运行测试的情况下扫描所有规范文件夹,并在某处公开标记

    我的代码的样本摘录。“: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
    

    如果您遵循rspec文档中列出的hash-rocket语法,类似这样的方法可能会奏效:

    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
      只打印唯一的标签

    如果您遵循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
      只打印唯一的标签

      • 我知道这已经晚了两年,但我和你在同一个地方。这就是我所做的

        自定义rspec格式化程序

        结果


        我知道这已经晚了两年,但我和你在同一个地方。这就是我所做的

        自定义rspec格式化程序

        结果


        “标记”是什么意思?标记用于对规范示例或it语句进行分组,以便您可以从rspec CLI调用它来运行这些示例或语句。如果标记规格,则可以按以下方式运行:tag:suite1,:suite2有关详细信息,请参阅文档。谢谢我以前从未使用过rspec的这个特性。我将尝试一种方法,您可以提取下面的所有标记。您所说的“标记”是什么意思?标记用于对规范示例或it语句进行分组,以便您可以从rspec CLI调用它来运行这些或不运行它们。如果标记规格,则可以按以下方式运行:tag:suite1,:suite2有关详细信息,请参阅文档。谢谢我以前从未使用过rspec的这个特性。我将尝试一种方法,您可以提取下面的所有标记。我正在寻找更多的ruby方法,而不是OS有限的替代方法。事实上,我在编写这些代码时正在Windows上运行。虽然您的解决方案看起来很有趣,只是通过字符串进行解析。我更新了我的问题,如果有一种方法可以优雅地解析ruby代码,我会提供更多信息。除了编写自己的解析器,我认为文本搜索将是最好的选择。您可以使用Cygwin()在Windows上安装我提到的所有工具。我更喜欢ruby方式,而不是OS有限的替代方案。事实上,我在编写这些代码时正在Windows上运行。虽然您的解决方案看起来很有趣,只是通过字符串进行解析。我更新了我的问题,如果有一种方法可以优雅地解析ruby代码,我会提供更多信息。除了编写自己的解析器,我认为文本搜索将是最好的选择。您可以使用Cygwin()在Windows上安装我提到的所有工具。
        # 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]