tutorial test rails ruby-on-rails ruby testunit

ruby on rails - test - Cómo ejecutar múltiples pruebas unitarias de Rails a la vez



test controller rails rspec (4)

Bash Script

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

A menudo corro los diferentes grupos de prueba como:

rake test:units rake test:functionals

También me gusta ejecutar archivos de prueba individuales o pruebas individuales:

ruby -Itest test/unit/file_test.rb ruby -Itest test/unit/file_test.rb -n ''/some context Im working on/''

También hay:

rake test TEST=test/unit/file_test.rb

E incluso he creado agrupaciones personalizadas en mi 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

Lo que aún no he descubierto es cómo ejecutar varias pruebas ad hoc en la línea de comandos. En otras palabras, ¿cómo puedo inyectar archivos de prueba en la tarea de rake? Algo como:

rake test TEST=test/unit/file_test.rb,test/functional/files_controller_test.rb

Entonces podría ejecutar una función de shell tomando parámetros arbitrarios y ejecutar la prueba rápida de prueba de ruby -Itest , o una tarea de rake si hay más de un archivo.


Hay una gema de pruebas de paralelismo que te permitirá ejecutar varias pruebas en paralelo. Una vez que lo tengas en tu Gemfile, puedes correr como ...

bundle exec parallel_test integration/test_*.rb

Para mi configuré una tarea de rake corto para ejecutar solo las pruebas que quiero.


Terminé hackeando esto en mi RakeFile de la misma manera:

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"

Luego activé esta función de bash que te permite llamar a rt con una lista arbitraria de archivos de prueba. Si solo hay un archivo, se ejecuta como ruby ​​directamente (esto ahorra 8 segundos para mi aplicación de 50k loc), de lo contrario ejecuta la tarea de 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 }


bundle exec ruby -I.:test -e "ARGV.each{|f| require f}" file1 file1

o:

find test -name ''*_test.rb'' | xargs -t bundle exec ruby -I.:test -e "ARGV.each{|f| require f}"