我正在尝试以这种方式构建我的测试,以便我可以自己运行某些上下文块,但还需要在单独的块中进一步强制执行嵌套标记。像这样:
context 'outer context', :outer_tag do
it 'inner it', :tag1 do
expect(1).to eq(1)
end
it 'inner it 2', :tag2 do
expect(2).to eq(2)
end
end
我希望按照以下方式运行:
rspec --tag outer-tag --tag tag1
希望它只在标记为:outer-tag的上下文中运行测试,这些标记本身标记为:tag1
有没有办法解决这个问题?目前这似乎是作为'或'运作,当我想我正在寻找它作为更多的'和'。
谢谢!
答案 0 :(得分:2)
您可以这样做:
RSpec.describe 'Something' do
context 'outer context', :outer_tag do
it 'inner one', :tag1, outer_tag: 'tag1' do
expect(1).to eq(1)
end
it 'inner two', :tag2, outer_tag: 'tag2' do
expect(2).to eq(2)
end
end
context 'another context', :different_tag do
it 'inner three', :tag2, different_tag: 'tag2' do
expect(3).to eq(3)
end
end
end
然后运行:
rspec example.rb --tag 'outer_tag'
# => Something
# outer context
# inner one
# inner two
rspec example.rb --tag 'outer_tag:tag2'
# => Something
# outer context
# inner two
rspec example.rb --tag tag2
# => Something
# outer context
# inner two
# another context
# inner three
当你需要多个级别时,这开始变得奇怪:
context 'third context', :final_tag do
context 'inside third', :inner_third, final_tag: 'inner_third' do
it 'inner four', :inner_four, inner_third: 'inner_four', final_tag: 'inner_third:inner_four' do
expect(4).to eq(4)
end
end
end
rspec example.rb --tag 'final_tag:inner_third:inner_four'
rspec example.rb --tag 'inner_third:inner_four'
rspec example.rb --tag inner_four
# All run
# => Something
# third context
# inside third
# inner four
工作,但非常冗长。
由于rspec在命令行上处理标签的方式(哈希),它可能会导致一些意想不到的东西试图将它们组合起来:
rspec example.rb --tag outer_tag --tag ~'outer_tag:tag2'
# Run options: exclude {:outer_tag=>"tag2"}
# => Something
# outer context
# inner one
# another context # <- nothing in this context was expected to run
# inner three (FAILED - 1)
这种方式有效:
rspec example.rb --tag outer_tag --tag ~tag2
# => Something
# outer context
# inner one
答案 1 :(得分:1)
你也可以使用RSpec&#39; exclusion filter运行所有:outer_tag
测试,但具有:tag1
规范的测试除外。
RSpec.configure do |config|
config.filter_run :outer_tag
config.filter_run_excluding :tag1
end
仅运行:tag2
的测试:
> rspec -fd tag_spec.rb
Run options:
include {:outer_tag=>true}
exclude {:tag1=>true}
outer context
inner it 2
Finished in 0.00326 seconds (files took 1.07 seconds to load)
1 example, 0 failures
您可以使用环境变量,以便不将代码修改为仅运行测试的子集。