条件过滤器
:if
和 :unless
元数据键可用于过滤示例,而无需配置排除过滤器。
隐式 :if
过滤器
给定一个名为“implicit_if_filter_spec.rb”的文件,其中包含
RSpec.describe ":if => true group", :if => true do
it(":if => true group :if => true example", :if => true) { }
it(":if => true group :if => false example", :if => false) { }
it(":if => true group no :if example") { }
end
RSpec.describe ":if => false group", :if => false do
it(":if => false group :if => true example", :if => true) { }
it(":if => false group :if => false example", :if => false) { }
it(":if => false group no :if example") { }
end
RSpec.describe "no :if group" do
it("no :if group :if => true example", :if => true) { }
it("no :if group :if => false example", :if => false) { }
it("no :if group no :if example") { }
end
当我运行 `rspec implicit_if_filter_spec.rb --format doc`
那么输出应包含所有这些
:if => true 组 :if => true 示例 |
:if => true 组 不 :if 示例 |
:if => false 组 :if => true 示例 |
不 :if 组 :if => true 示例 |
不 :if 组 不 :if 示例 |
以及输出不应包含任何这些
:if => true 组 :if => false 示例 |
:if => false 组 :if => false 示例 |
:if => false 组 不 :if 示例 |
不 :if 组 :if => false 示例 |
隐式 :unless
过滤器
给定一个名为“implicit_unless_filter_spec.rb”的文件,其中包含
RSpec.describe ":unless => true group", :unless => true do
it(":unless => true group :unless => true example", :unless => true) { }
it(":unless => true group :unless => false example", :unless => false) { }
it(":unless => true group no :unless example") { }
end
RSpec.describe ":unless => false group", :unless => false do
it(":unless => false group :unless => true example", :unless => true) { }
it(":unless => false group :unless => false example", :unless => false) { }
it(":unless => false group no :unless example") { }
end
RSpec.describe "no :unless group" do
it("no :unless group :unless => true example", :unless => true) { }
it("no :unless group :unless => false example", :unless => false) { }
it("no :unless group no :unless example") { }
end
当我运行 `rspec implicit_unless_filter_spec.rb --format doc`
那么输出应包含所有这些
:unless => true 组 :unless => false 示例 |
:unless => false 组 :unless => false 示例 |
:unless => false 组 不 :unless 示例 |
不 :unless 组 :unless => false 示例 |
不 :unless 组 不 :unless 示例 |
以及输出不应包含任何这些
:unless => true 组 :unless => true 示例 |
:unless => true 组 不 :unless 示例 |
:unless => false 组 :unless => true 示例 |
不 :unless 组 :unless => true 示例 |
将隐式过滤器与显式包含过滤器结合使用
给定一个名为“explicit_inclusion_filter_spec.rb”的文件,其中包含
RSpec.configure do |c|
c.filter_run :focus => true
end
RSpec.describe "group with :focus", :focus => true do
it("focused example") { }
it("focused :if => true example", :if => true) { }
it("focused :if => false example", :if => false) { }
it("focused :unless => true example", :unless => true) { }
it("focused :unless => false example", :unless => false) { }
end
RSpec.describe "group without :focus" do
it("unfocused example") { }
it("unfocused :if => true example", :if => true) { }
it("unfocused :if => false example", :if => false) { }
it("unfocused :unless => true example", :unless => true) { }
it("unfocused :unless => false example", :unless => false) { }
end
当我运行 `rspec explicit_inclusion_filter_spec.rb --format doc`
那么输出应包含所有这些
聚焦示例 |
聚焦 :if => true 示例 |
聚焦 :unless => false 示例 |
以及输出不应包含任何这些
聚焦 :if => false 示例 |
聚焦 :unless => true 示例 |
未聚焦 |
将隐式过滤器与显式排除过滤器结合使用
给定一个名为“explicit_exclusion_filter_spec.rb”的文件,其中包含
RSpec.configure do |c|
c.filter_run_excluding :broken => true
end
RSpec.describe "unbroken group" do
it("included example") { }
it("included :if => true example", :if => true) { }
it("included :if => false example", :if => false) { }
it("included :unless => true example", :unless => true) { }
it("included :unless => false example", :unless => false) { }
end
RSpec.describe "broken group", :broken => true do
it("excluded example") { }
it("excluded :if => true example", :if => true) { }
it("excluded :if => false example", :if => false) { }
it("excluded :unless => true example", :unless => true) { }
it("excluded :unless => false example", :unless => false) { }
end
当我运行 `rspec explicit_exclusion_filter_spec.rb --format doc`
那么输出应包含所有这些
包含示例 |
包含 :if => true 示例 |
包含 :unless => false 示例 |
以及输出不应包含任何这些
包含 :if => false 示例 |
包含 :unless => true 示例 |
排除 |
:if 和 :unless 排除在有显式包含时仍然有效
给定一个名为“if_and_unless_spec.rb”的文件,其中包含
RSpec.describe "Using inclusions" do
context "inclusion target" do
it "is filtered out by :if", :if => false do
end
it 'is filtered out by :unless', :unless => true do
end
it 'is still run according to :if', :if => true do
end
it 'is still run according to :unless', :unless => false do
end
end
end
当我运行 `rspec if_and_unless_spec.rb --format doc -e 'inclusion target'`
那么输出应包含所有这些
仍然根据 :if 运行 |
仍然根据 :unless 运行 |
以及输出不应包含任何这些
被 :if 过滤掉 |
被 :unless 过滤掉 |