J'ai téléchargé le code source d'un projet, trouvé un bogue et corrigé le problème.
Maintenant, je veux faire des tests pour savoir si j'ai cassé quelque chose.
Les tests sont en minitest DSL.
Comment puis-je les exécuter tous à la fois?
J'ai cherché des tâches de rake, etc., mais je n'en ai trouvé aucune.
Voici un lien vers Rake :: TestTask .
Il y a un exemple dans la page pour vous aider à démarrer.
J'en posterai un autre que j'utilise actuellement pour un petit bijou:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.pattern = "spec/*_spec.rb"
end
Comme vous pouvez le constater, je suppose que tous mes fichiers sont dans /lib
et que mes spécifications sont dans /spec
et portent le nom whatever_spec.rb
.
J'espère que ça aide.
la réponse de locks est meilleure, mais je voulais également souligner que vous pouvez aussi exécuter minitest directement à partir de la commande, comme avec la commande Ruby. Pour exécuter les tests dans le fichier spec/calculator_spec.rb, exécutez:
$ Ruby spec/calculator_spec.rb
N'oubliez pas d'inclure le code suivant dans le fichier calculator_spec.rb:
require 'minitest/spec'
require 'minitest/autorun'
Pour exécuter tous les tests dans le répertoire spec /, utilisez la commande suivante (voir cet article pour plus de détails Globbing ne fonctionne pas avec Minitest - Un seul fichier est exécuté )
$ for file in spec/*.rb; do Ruby $file; done
C'est ce que Rake::TestTask
fait sous le capot, plus ou moins:
Ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb
Remarque: lib
& test/test*.rb
(ci-dessus) sont les valeurs par défaut, mais test
& test/*_test.rb
, respectivement, sont plus typiques.
Source: rake/testtask.rb à l'adresse c34d9e0, ligne 169
Si vous utilisez JRuby et que vous souhaitez éviter de payer deux fois le coût de démarrage (une fois pour Rake, puis une fois pour le sous-processus démarré par Rake), utilisez simplement cette commande.
Voici ma rakefile
entière, que je mets dans mon répertoire principal:
task :default => :test
task :test do
Dir.glob('./test/*_test.rb').each { |file| require file}
end
Pour exécuter tous mes fichiers de test à la fois, il suffit de taper rake
. C'est tout!
Assurez-vous que require 'minitest/autorun'
figure en haut de chacun de vos fichiers Minitest. Dir.glob travaille certainement avec Minitest.
Pour obtenir une jolie sortie Minitest colorée, avec les noms de toutes mes méthodes de test, j'ai le fichier minitest_helper.rb
dans mon répertoire/test. (J'ai dû installer le gem minitest-reporters):
require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
require 'minitest/autorun'
Il me suffisait de require_relative './minitest_helper'
en haut de chacun de mes fichiers de test.
Cela peut aussi être fait via un Makefile.
default:
echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | Ruby
exécuter make
lancera tous vos tests.
$ rake test
a épuisé la boîte de dialogue Rails 5.0.
Une autre façon de faire cela en utilisant uniquement la bibliothèque standard de Ruby est avec Dir.glob
. Dans un fichier Ruby, ceci ressemblerait à ceci:
require "minitest/autorun"
Dir.glob("**/*Test.rb") { |f| require_relative(f) }
Ou depuis la ligne de commande, vous pouvez utiliser cette commande:
Ruby -I . -e "require 'minitest/autorun'; Dir.glob('**/*Test.rb') { |f| require(f) }"
Dir.glob('**/*Test.rb')
recherche récursivement dans le répertoire en cours tout fichier correspondant à *Test.rb
. Nous prenons donc simplement tous ces fichiers et require
ou require_relative
. require_relative
échoue à partir de la ligne de commande. Nous utilisons donc require
, mais ajoutons d’abord le répertoire en cours au $LOAD_PATH
à -I .
.
Je réalise que la question est très ancienne, mais rake test
fonctionne pour moi dans Rails 4.2, y compris les fichiers en cours de test/ainsi que de test/intégration /, test/unité /, etc.