在运行时以递归方式为RSpec测试文件生成glob

时间:2011-05-04 01:50:44

标签: ruby rspec rspec2

我想要在以下层次结构中进行分组的一套RSpec测试:

tests/
  featA/
     t1.rb
     t2.rb
  featB/
     t3.rb

但是当我跑步时

$ rspec tests

我得到以下内容:

rspec tests
No examples were matched. Perhaps {:unless=>#<Proc:0x00007f318919cc08@/usr/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/configuration.rb:51>, :if=>#<Proc:0x00007f318919cdc0@/usr/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/configuration.rb:50>} is excluding everything?

Finished in 0.00003 seconds
0 examples, 0 failures

我觉得自己很生气,但似乎没有办法让RSpec递归地为测试文件生成?这个功能是否存在?

编辑:

我有一个解决方法:

$ rspec `find tests -name "*.rb"`

但我怀疑我不应该这样做。我是对的吗?

2 个答案:

答案 0 :(得分:6)

你已经暴露了我的疏忽!在rspec-1中,您可以这样说:

spec test --pattern "**/*.rb"

但是rspec-2中缺少--pattern选项。我刚刚添加了它(in development),它将包含在rspec-2.6.0版本中。

答案 1 :(得分:1)

我通常通过rake管理我的规格上运行的RSpec。我的Rakefile的相关部分看起来像这样:

require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec) do |t|
  t.rspec_opts = ['--color', '-f progress', '-r ./spec/spec_helper.rb']
  t.pattern = 'spec/**/*_spec.rb'
  t.fail_on_error = false
end

现在rake spec使用适当的选项运行RSpec;您需要更改t.pattern以匹配您要运行的规范。

请务必查看RSpec2 site以获取更多信息。