Rspec运行除特定文件夹之外的所有测试

时间:2015-09-30 15:34:34

标签: ruby rspec

我正在开发的项目有一个相当大的测试套件。我正在编写测试,当我单独运行它时会通过,但是当我运行整个测试套件$rspec时,我会得到一些非常时髦的行为导致测试失败。

现在测试嵌套如下:

spec/folder1/folder2/folder3/test.rb

这些命令中的每一个都运行测试正常,一切都通过了:

$rspec spec/folder1/folder2/folder3
$rspec spec/folder1/folder2
$rspec spec/folder1/

folder1的同一级别还有大约10个其他文件夹,我想单独不与套件的其余部分一起运行,以确定哪个文件夹包含打破我正在进行的测试的测试

这可能吗?

3 个答案:

答案 0 :(得分:34)

使用--exclude-pattern,它们非常方便:

https://www.relishapp.com/rspec/rspec-core/v/3-3/docs/configuration/exclude-pattern

关于他们的一件好事:

  

--exclude-pattern标志接受shell样式的glob联盟

所以你可以做rspec --exclude-pattern "spec/{foldername1,foldername2}/**/*_spec.rb"

之类的事情

答案 1 :(得分:1)

在Rspec项目中查看Exclusion filters,可能会有所帮助。

您还可以使用Inclusion filters仅运行所需的测试。

答案 2 :(得分:0)

我知道问题是针对RSpec的,但是,我试图弄清楚如何使用minitest和--exclude标志仅按名称而不是文件位置进行过滤。

要在minitest中使用文件位置执行此操作,您需要添加rake任务。

lib / tasks / test.rake

# lib/tasks/test.rake

Rake::Task["test:system"].clear

namespace :test do
  desc "Run all system tests except test/serial folder"
  task system: "test:prepare" do
    $: << "test"
    test_files = FileList["test/system/**/*_test.rb"].exclude(
      "test/system/serial/**/*_test.rb"
    )
    Rails::TestUnit::Runner.run(test_files)
  end

  desc "Run all serial test folder"
  task serial: "test:prepare" do
    $: << "test"
    test_files = FileList["test/system/serial/*_test.rb"]
    Rails::TestUnit::Runner.run(test_files)
  end
end