--tag 选项

使用 --tag(或 -t)选项运行与指定标签匹配的示例。标签可以是简单的 namename:value 对。

如果提供简单的 name,则只有具有 :name => true 的示例将运行。如果给定 name:value 对,则具有 name => value 的示例将运行,其中 value 始终是字符串。在这两种情况下,name 都将转换为符号。

标签也可以通过在标签前添加 ~ 来用于排除示例。例如,~tag 将排除所有标记为 :tag => true 的示例,而 ~tag:value 将排除所有标记为 :tag => value 的示例。

通过标签进行过滤在内部使用哈希,这意味着您不能为同一个键指定多个过滤器。例如,如果您尝试排除 :name => 'foo':name => 'bar',您最终只会排除 :name => 'bar'

为了与 Cucumber 语法兼容,标签可以选择以 @ 符号开头,该符号将被忽略为标签的一部分,例如 --tag @focus--tag focus 相同,并扩展为 :focus => true

背景

假设 一个名为“tagged_spec.rb”的文件,其中包含

RSpec.describe "group with tagged specs" do
  it "example I'm working now", :focus => true do; end
  it "special example with string", :type => 'special' do; end
  it "special example with symbol", :type => :special do; end
  it "slow example", :skip => true do; end
  it "ordinary example", :speed => 'slow' do; end
  it "untagged example" do; end
end

过滤具有不存在标签的示例

我运行 rspec . --tag mytag

那么 该过程应该成功,即使没有运行任何示例。

过滤具有简单标签的示例

我运行 rspec . --tag focus

那么 输出应该包含“include {:focus=>true}”

并且 示例应该全部通过。

过滤具有简单标签和 @ 的示例

我运行 rspec . --tag @focus

那么 输出应该包含“include {:focus=>true}”

那么 示例应该全部通过。

过滤具有 name:value 标签的示例

我运行 rspec . --tag type:special

那么 输出应该包含

include {:type=>"special"}

并且 输出应该包含“2 examples”

并且 示例应该全部通过。

过滤具有 name:value 标签和 @ 的示例

我运行 rspec . --tag @type:special

那么 输出应该包含

include {:type=>"special"}

并且 示例应该全部通过。

排除具有简单标签的示例

我运行 rspec . --tag ~skip

那么 输出应该包含“exclude {:skip=>true}”

那么 示例应该全部通过。

排除具有简单标签和 @ 的示例

我运行 rspec . --tag ~@skip

那么 输出应该包含“exclude {:skip=>true}”

那么 示例应该全部通过。

排除具有 name:value 标签的示例

我运行 rspec . --tag ~speed:slow

那么 输出应该包含

exclude {:speed=>"slow"}

那么 示例应该全部通过。

排除具有 name:value 标签和 @ 的示例

我运行 rspec . --tag ~@speed:slow

那么 输出应该包含

exclude {:speed=>"slow"}

那么 示例应该全部通过。

过滤具有简单标签的示例,排除具有其他标签的示例

我运行 rspec . --tag focus --tag ~skip

那么 输出应该包含“include {:focus=>true}”

并且 输出应该包含“exclude {:skip=>true}”

并且 示例应该全部通过。

排除具有多个标签的示例

我运行 rspec . --tag ~skip --tag ~speed:slow

那么 输出应该包含以下内容之一

exclude {:skip=>true, :speed=>“slow”}
exclude {:speed=>“slow”, :skip=>true}

那么 示例应该全部通过。