Ich habe den Quellcode für ein Projekt heruntergeladen, einen Fehler gefunden und ihn behoben.
Jetzt möchte ich Tests durchführen, um herauszufinden, ob ich etwas kaputt gemacht habe.
Die Tests sind in kleinstem DSL.
Wie führe ich sie alle gleichzeitig aus?
Ich habe nach geeigneten Rechenaufgaben usw. gesucht, aber keine gefunden.
Antworten:
Hier ist ein Link zu Rake :: TestTask .
Auf der Seite finden Sie ein Beispiel für den Einstieg.
Ich werde einen anderen posten, den ich gerade für einen Edelstein verwende:
require 'rake/testtask' Rake::TestTask.new do |t| t.pattern = "spec/*_spec.rb" end
Wie Sie sehen können, gehe ich davon aus, dass meine Dateien alle enthalten sind
/lib
und dass meine Spezifikationen enthalten sind/spec
und benannt sindwhatever_spec.rb
Ich hoffe es hilft.
quelle
rake test
Die Antwort von locks ist besser, aber ich wollte auch darauf hinweisen, dass Sie minitest auch direkt vom Befehl aus ausführen können, wie mit dem Befehl ruby. So führen Sie die Tests in der Datei spec / calculator_spec.rb aus:
$ ruby spec/calculator_spec.rb
Denken Sie daran, den folgenden Code in die Datei calculator_spec.rb aufzunehmen:
require 'minitest/spec' require 'minitest/autorun'
Verwenden Sie den folgenden Befehl, um alle Tests im Verzeichnis spec / auszuführen (weitere Informationen finden Sie in diesem Beitrag. Globbing funktioniert nicht mit Minitest - Es wird nur eine Datei ausgeführt ).
$ for file in spec/*.rb; do ruby $file; done
quelle
Das
Rake::TestTask
macht mehr oder weniger unter der Haube:ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb
Hinweis:
lib
&test/test*.rb
(oben) sind die Standardeinstellungen, abertest
&test/*_test.rb
sind typischer.Quelle: rake / testtask.rb in Zeile 169 von c34d9e0
Wenn Sie JRuby verwenden und die Startkosten nicht zweimal bezahlen möchten (einmal für Rake und dann einmal für den von Rake gestarteten Unterprozess), verwenden Sie einfach diesen Befehl.
quelle
./test/*_test.rb
das geht aber nichttest/*_test.rb
. Sie können auch verwenden,ruby -I lib -e 'ARGV.each { |f| load f }' test/*_test.rb
die mit beiden./test/*_test.rb
undtest/*_test.rb
Hier ist mein gesamtes
rakefile
, das ich in mein oberstes Verzeichnis gestellt habe:task :default => :test task :test do Dir.glob('./test/*_test.rb').each { |file| require file} end
Um alle meine Testdateien gleichzeitig auszuführen, tippe ich einfach
rake
. Das ist es!require 'minitest/autorun'
Stellen Sie sicher, dass sich oben in jeder Ihrer Minitest-Dateien befindet. Dir.glob funktioniert definitiv mit Minitest.Um eine hübsche, farbige Minitest-Ausgabe mit Namen aller meiner Testmethoden zu erhalten, habe ich die Datei
minitest_helper.rb
in meinem Verzeichnis / test. (Musste die Edelstein-Minitest-Reporter installieren):require 'minitest/reporters' Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new) require 'minitest/autorun'
Ich musste nur
require_relative './minitest_helper'
oben in jeder meiner Testdateien.quelle
$LOAD_PATH
.Dies kann auch über ein Makefile erfolgen.
default: echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby
Beim Ausführen
make
werden alle Ihre Tests ausgeführt.quelle
$ rake test
lief aus der Schienen 5.0 Box.quelle
Eine andere Möglichkeit, dies nur mit Rubys Standardbibliothek zu tun, ist mit
Dir.glob
. In einer Ruby-Datei würde dies folgendermaßen aussehen:require "minitest/autorun" Dir.glob("**/*Test.rb") { |f| require_relative(f) }
Oder über die Befehlszeile können Sie diesen Befehl verwenden:
ruby -I . -e "require 'minitest/autorun'; Dir.glob('**/*Test.rb') { |f| require(f) }"
Dir.glob('**/*Test.rb')
Durchsucht rekursiv das aktuelle Verzeichnis nach passenden Dateien*Test.rb
, sodass wir einfach alle diese Dateien und /require
oderrequire_relative
sie nehmen. Über die Befehlszeilerequire_relative
schlägt fehl, daher verwenden wirrequire
, fügen aber zuerst das aktuelle Verzeichnis zum$LOAD_PATH
Through hinzu-I .
quelle
Mir ist klar, dass dies eine sehr alte Frage ist, die jedoch
rake test
in Rails 4.2 für mich funktioniert, einschließlich der zu testenden Dateien / sowie der getesteten / integrierten /, test / unit / usw.quelle
Wenn Sie keinen Rechen haben, versuchen Sie Folgendes:
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)
quelle
rake
.