使用rake从特定文件夹运行rspec测试

时间:2014-02-03 15:53:08

标签: rspec rake capybara

我希望使用rake在包含spec文件夹的文件夹中运行特定测试。我的文件夹结构如下:

- tests
  -spec
   - folder_A
   - folder_B
- rakefile

因此,例如,当部署某些代码时,我只想在folder_A中运行测试。我如何使用rake做到这一点?我的rakefile存在于我的tests文件夹中。我目前有命令:

RSpec::Core::RakeTask.new(:spec)
 task :default => :spec

这会像您期望的那样在spec文件夹中运行所有测试。我已经尝试将rake文件移动到spec文件夹并将rake任务编辑为:

RSpec::Core::RakeTask.new(:folder_A)
 task :default => :folder_A

然而,这给了我一条消息:“没有找到符合./spec{,//*} /*_spec.rb的例子”(请注意,文件夹A和BI中有子目录对于被测应用的不同领域)

我是否有可能在同一个rakefile中有2个不同的rake任务,只能从folder_A运行测试?

任何帮助都会很棒!!

1 个答案:

答案 0 :(得分:6)

为什么不使用rspec?

rspec spec/folder_A

更新回复

:spec中的Rakefile是指Rspec rake任务,而不是文件夹。您可以通过传递rake-task doc page

上显示的块来向任务发送选项

在您的情况下,您可以使用pattern选项传递文件夹的glob。

RSpec::Core::RakeTask.new(:spec) do |t|
  t.pattern = 'spec/folder_A/*/_spec.rb'
end

对于两个不同的rake任务,您需要在每个任务中实例化RakeTask。所以你的整个Rakefile看起来像这样:

require 'rspec/core/rake_task'

task :folder_A do
  RSpec::Core::RakeTask.new(:spec) do |t|
    t.pattern = 'spec/folder_A/*/_spec.rb'
  end
  Rake::Task["spec"].execute
end

task :folder_B do
  RSpec::Core::RakeTask.new(:spec) do |t|
    t.pattern = 'spec/folder_B/*/_spec.rb'
  end
  Rake::Task["spec"].execute
end

task :default do
  RSpec::Core::RakeTask.new(:spec)
  Rake::Task["spec"].execute
end

有关pattern方法和其他选项的详细信息,请参阅the RakeTask doc