web-dev-qa-db-fra.com

Comment exécuter tous les tests avec minitest?

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.

63
guai

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.

86
locks

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 
23
Powers

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.

18
Theo

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.

13
Raymond Gan

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.

6
dkinzer

$ rake test a épuisé la boîte de dialogue Rails 5.0.

3
thedanotto

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 ..

2
Justin

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.

0
David Hempy