我正在开发的项目有一个相当大的测试套件。我正在编写测试,当我单独运行它时会通过,但是当我运行整个测试套件$rspec
时,我会得到一些非常时髦的行为导致测试失败。
现在测试嵌套如下:
spec/folder1/folder2/folder3/test.rb
这些命令中的每一个都运行测试正常,一切都通过了:
$rspec spec/folder1/folder2/folder3
$rspec spec/folder1/folder2
$rspec spec/folder1/
在folder1
的同一级别还有大约10个其他文件夹,我想单独不与套件的其余部分一起运行,以确定哪个文件夹包含打破我正在进行的测试的测试
这可能吗?
答案 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