使用RSpec::Core::Runner.run执行带标签测试失败问题咨询
解决RSpec::Core::Runner.run执行focus标签测试被过滤的问题
问题重现
可以通过RSpec::Core::Runner.run正常执行单个测试文件:
args = %w(-r spec_helper --order defined --format CustomFormatter --format documentation ./spec/Tests_spec.rb) RSpec::Core::Runner.run(args)
但执行带:focus => true标签的测试时,所有用例被过滤:
测试用例:
it "example I'm working now", :focus => true do; end
执行代码:
args = %w(-r spec_helper --order defined --format CustomFormatter --format documentation --tag focus) RSpec::Core::Runner.run(args)
输出:
Run options: include {:focus=>true} All examples were filtered out
原因及解决方案
核心原因
你的执行参数中没有指定要扫描的测试文件或目录,RSpec不知道去哪里查找带:focus标签的测试用例,因此找不到匹配的用例,提示全部被过滤。
解决方案1:添加测试文件/目录路径
在args数组末尾添加测试文件路径或者spec目录路径即可:
- 执行指定文件中的focus测试:
args = %w(-r spec_helper --order defined --format CustomFormatter --format documentation --tag focus ./spec/Tests_spec.rb)
- 执行整个spec目录下的focus测试:
args = %w(-r spec_helper --order defined --format CustomFormatter --format documentation --tag focus ./spec)
解决方案2:优化spec_helper配置(可选)
如果你经常需要运行focus标签的测试,可以在spec_helper.rb中添加自动匹配配置,这样无需每次手动加--tag focus参数:
RSpec.configure do |config| # 当存在focus标签时,只运行带focus的用例;没有focus标签时运行所有用例 config.filter_run_when_matching :focus end
之后执行时只需指定文件/目录即可,无需额外的tag参数:
args = %w(-r spec_helper --order defined --format CustomFormatter --format documentation ./spec/Tests_spec.rb) RSpec::Core::Runner.run(args)
内容的提问来源于stack exchange,提问作者kroe761
相关产品推荐
相关产品推荐

