我经常运行各种测试组,如:
rake test:units
rake test:functionals
我也喜欢运行单独的测试文件或单独的测试:
ruby -Itest test/unit/file_test.rb
ruby -Itest test/unit/file_test.rb -n '/some context Im working on/'
还有:
rake test TEST=test/unit/file_test.rb
我甚至在我的Rakefile中创建了自定义分组:
Rake::TestTask.new(:ps3) do |t|
t.libs << 'test'
t.verbose = true
t.test_files = FileList["test/unit/**/ps3_*_test.rb", "test/functional/services/ps3/*_test.rb"]
end
我还没想到的是如何在命令行运行多个临时测试。换句话说,我如何将test_files注入rake任务。类似的东西:
rake test TEST=test/unit/file_test.rb,test/functional/files_controller_test.rb
然后我可以运行一个带有任意参数的shell函数并运行快速ruby -Itest
单个测试,或者如果有多个文件则执行rake
任务。
答案 0 :(得分:16)
bundle exec ruby -I.:test -e "ARGV.each{|f| require f}" file1 file1
或:
find test -name '*_test.rb' | xargs -t bundle exec ruby -I.:test -e "ARGV.each{|f| require f}"
答案 1 :(得分:12)
我最终自己就像这样将我自己闯入我的RakeFile:
Rake::TestTask.new(:fast) do |t|
files = if ENV['TEST_FILES']
ENV['TEST_FILES'].split(',')
else
FileList["test/unit/**/*_test.rb", "test/functional/**/*_test.rb", "test/integration/**/*_test.rb"]
end
t.libs << 'test'
t.verbose = true
t.test_files = files
end
Rake::Task['test:fast'].comment = "Runs unit/functional/integration tests (or a list of files in TEST_FILES) in one block"
然后我掀起了这个bash函数,它允许你用任意的测试文件列表调用rt
。如果只有一个文件,则直接将其作为ruby运行(这为我的50k loc应用程序节省了8秒),否则它将运行rake任务。
function rt {
if [ $# -le 1 ] ; then
ruby -Itest $1
else
test_files = ""
while [ "$1" != "" ]; do
if [ "$test_files" == "" ]; then
test_files=$1
else
test_files="$test_files,$1"
fi
shift
done
rake test:fast TEST_FILES=$test_files
fi
}
答案 2 :(得分:2)
有一个parallel_tests gem可以让你并行运行多个测试。一旦你在你的Gemfile中拥有它,你就可以运行...
bundle exec parallel_test integration/test_*.rb
对我来说,我设置了一个简短的rake任务,只运行我想要的测试。
答案 3 :(得分:0)
RUBY_MULTI_TEST="/tmp/ruby_multi_test.rb"
function suitup-multi-test-prepare {
sudo rm $RUBY_MULTI_TEST 2> /dev/null
}
function suitup-multi-test-add {
WORK_FOLDER=`pwd`
echo "require '$WORK_FOLDER/$1' " >> $RUBY_MULTI_TEST
}
function suitup-multi-test-status {
cat $RUBY_MULTI_TEST 2> /dev/null
}
function suitup-multi-test-run {
suitup-multi-test-status
ruby -I test/ $RUBY_MULTI_TEST
}
ery@tkpad:rails_app:$ suitup-multi-test-prepare
ery@tkpad:rails_app:$ suitup-multi-test-add test/functional/day_reports_controller_test.rb
ery@tkpad:rails_app:$ suitup-multi-test-add test/functional/month_reports_controller_test.rb
ery@tkpad:rails_app:$ suitup-multi-test-run