--tag
选项
使用 --tag
(或 -t
)选项运行与指定标签匹配的示例。标签可以是简单的 name
或 name: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} |
那么 示例应该全部通过。