Come eseguire tutti i test con minitest?

Ho scaricato il codice sorgente per un progetto, trovato un bug e risolto il problema.

Ora voglio eseguire i test per scoprire se ho rotto qualcosa.

I test sono in DSL minime.

Come li eseguo tutti in una volta?

Ho cercato i compiti di rake applicabili ecc., Ma non ne ho trovato nessuno.

Ecco un link a Rake :: TestTask .

C’è un esempio nella pagina per iniziare.
Ne posterò un altro che sto usando in questo momento per una gem:

require 'rake/testtask' Rake::TestTask.new do |t| t.pattern = "spec/*_spec.rb" end 

Come puoi vedere, presumo che i miei file siano tutti in /lib e che le mie specifiche siano in /spec e siano denominate whatever_spec.rb

Spero che sia d’aiuto.

la risposta dei lock è migliore, ma volevo anche sottolineare che puoi anche eseguire minitest direttamente dal comando come con il comando ruby. Per eseguire i test nel file spec / calculator_spec.rb eseguire:

 $ ruby spec/calculator_spec.rb 

Ricorda di includere il seguente codice nel file calculator_spec.rb:

 require 'minitest/spec' require 'minitest/autorun' 

Per eseguire tutti i test nella directory spec /, utilizzare il seguente comando (vedere questo post per ulteriori dettagli Globbing non funziona con Minitest – Viene eseguito solo un file )

 $ for file in spec/*.rb; do ruby $file; done 

Questo è ciò che Rake::TestTask fa sotto il cofano, più o meno:

 ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb 

Nota: lib e test/test*.rb (sopra) sono i valori predefiniti, ma test & test/*_test.rb , rispettivamente, sono più tipici.

Fonte: rake / testtask.rb alla riga 169 c34d9e0

Se stai usando JRuby e vuoi evitare di pagare il costo di avvio due volte (una volta per Rake e poi una volta per il sottoprocesso avviato da Rake), basta usare quel comando.

Ecco il mio intero rakefile , che ho inserito nella mia directory principale:

 task :default => :test task :test do Dir.glob('./test/*_test.rb').each { |file| require file} end 

Per eseguire tutti i miei file di test contemporaneamente, digito semplicemente rake . Questo è tutto!

Assicurati di aver require 'minitest/autorun' nella parte superiore di ciascun file Minitest. Dir.glob funziona sicuramente con Minitest.

Per ottenere un output Minitest colorato, con i nomi di tutti i miei metodi di test, ho il file minitest_helper.rb nella mia directory / test. (Ho dovuto installare la gem minitest-reporter):

 require 'minitest/reporters' Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new) require 'minitest/autorun' 

Ho appena dovuto require_relative './minitest_helper' nella parte superiore di ciascuno dei miei file di test.

Questo può anche essere fatto tramite un Makefile.

 default: echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby 

l’esecuzione di make eseguirà tutti i test.

$ rake test ha esaurito la scatola 5.0.

Un altro modo per farlo usando solo la libreria standard di Ruby è con Dir.glob . Da all’interno di un file di ruby, questo sarebbe simile a questo:

 require "minitest/autorun" Dir.glob("**/*Test.rb") { |f| require_relative(f) } 

O dalla riga di comando, puoi usare questo comando:

 ruby -I . -e "require 'minitest/autorun'; Dir.glob('**/*Test.rb') { |f| require(f) }" 

Dir.glob('**/*Test.rb') cerca in modo ricorsivo la directory corrente per qualsiasi file che corrisponde a *Test.rb , quindi prendiamo semplicemente tutti quei file e require o require loro. Dalla riga di comando, require_relative esito negativo, quindi usiamo require ma prima aggiungiamo la directory corrente a $LOAD_PATH attraverso -I .

Mi rendo conto che questa è una domanda molto vecchia, ma il rake test funziona per me in Rails 4.2, inclusi i file sotto test / così come test / integrazione /, test / unità /, ecc.

Se non hai il rake, prova questo:

http://blog.gingergriffis.com/post/85871430778/ruby-how-to-run-all-tests-in-a-directory

 # run_all_tests.rb require 'find' require 'optparse' options = { :exclude => [], } OptionParser.new do |opts| opts.on('--exclude Comma Separated String', 'Test scripts to exclude') do |css| options[:exclude] = css.split(',') end end.parse! commands = [] Find.find(File.dirname(__FILE__)) do |path| Find.prune if path =~ /#{__FILE__}$/ if !File.directory?(path) && (path =~ /(.*)\.rb$/) if options[:exclude].none? {|e| path.include?(e)} commands << "ruby #{path}" end end end command_string = commands.join(" && ") exec(command_string)