Ruby on rails 在运行测试之前,在Rspec中查找所有标记
我正在使用rspec(3.5)运行测试,并使用它构建CLI。目前正在考虑rake。在我的CLI中,我希望它能够找到我的spec文件夹中可用的所有标记,并在运行RSPEC之前提供它作为测试运行的选项 我一直在窥探spec_helper,但没有找到标签信息。我的理解是,rspec CLI本身接受所有标记作为输入,然后遍历所有文件以查看它们是否与标记匹配,如果匹配,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中的一个选项提供 允许用户选择
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
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]