web-dev-qa-db-fra.com

Est-il possible d'exécuter un seul test dans MiniTest?

Je peux exécuter tous les tests dans un seul fichier avec:

rake test TEST=path/to/test_file.rb

Cependant, si je veux exécuter un seul test dans ce fichier, comment le ferais-je?

Je recherche des fonctionnalités similaires à:

rspec path/to/test_file.rb -l 25
143
Josiah Kiehl

Je recherche des fonctionnalités similaires à rspec path/to/file.rb -l 25

Ouaip! Utilisez La gemme "m" de Nick Quaranto . Avec cela, vous pouvez dire:

m spec/my_spec.rb:25
40
Elliot Winkler

La commande devrait être:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
187
jduan

As-tu essayé:

Ruby path/to/test_file.rb --name test_method_name
140
Andrew Grimm

C’est l’un des problèmes qui me préoccupent à propos du string name definition dans les tests.

Lorsque vous avez:

def test_my_test
end

vous savez toujours comment votre test est nommé afin que vous puissiez l'exécuter comme ceci:

Ruby my_test -n test_my_test

Mais quand vous avez quelque chose comme:

it "my test" do
end

vous ne savez jamais exactement comment ce test est réellement nommé en interne, vous ne pouvez donc pas utiliser l'option -n directement.

Pour savoir comment ce test est nommé en interne, vous n'avez qu'une option: exécutez tout le fichier pour essayer de regarder dans les journaux.

Ma solution de contournement est d'ajouter (temporairement) quelque chose au nom de test très unique comme:

it "my test xxx" do
end

puis utilisez la version RegEx du paramètre '-n' comme ceci:

Ruby my_test.rb -n /xxx/
46
fguillen

Aucune gemme requise: Ruby -Itest test/lib/test.rb --name /some_test/

Source: http://blog.arvidandersson.se/2012/03/28/minimalicous-tests-in-Ruby-1-9

46
randomor

Si vous utilisez MiniTest avec Rails 5, la meilleure façon d'exécuter tous les tests dans un seul fichier est la suivante:

bin/Rails test path/to/test_file.rb

Et pour un seul test (par exemple à la ligne 25):

bin/Rails test path/to/test_file.rb:25

Voir http://guides.rubyonrails.org/testing.html#the-Rails-test-runner

24
Derek Hill

Vous pouvez l'utiliser pour exécuter un seul fichier:

rake test TEST=test/path/to/file.rb

J'ai aussi utilisé 

Ruby -I"lib:test" test/path/to/file.rb

pour un meilleur affichage.

20
tuhaj

Il y a 2 façons de le faire:

  1. Exécutez les tests 'manuellement' (voir la réponse d'Andrew Grimm).
  2. Hack Rake::TestTask cible pour utiliser un autre chargeur de tests.

Rake::TestTask (à partir de rake 0.8.7) est théoriquement capable de passer des options supplémentaires à MiniTest::Unit avec une option de ligne de commande "TESTOPTS=blah-blah", par exemple:

% rake test TEST = test/test_foobar.rb TESTOPTS = "- nom test_foobar1 -v" 

En pratique, l'option --name (un filtre pour les noms de test) ne fonctionnera pas, en raison des internes de rake. Pour résoudre ce problème, vous devrez écrire un petit patch de singe dans votre fichier Rakefile:

# overriding the default rake tests loader
class Rake::TestTask
  def rake_loader
    'test/my-minitest-loader.rb'
  end
end

# our usual test terget 
Rake::TestTask.new {|i|
  i.test_files = FileList['test/test_*.rb']
  i.verbose = true 
}

Ce patch nécessite que vous créiez un fichier test/my-minitest-loader.rb:

ARGV.each { |f|
  break if f =~ /^-/
  load f
}

Pour imprimer toutes les options possibles pour Minitest, tapez

% Ruby -r minitest/autorun -e '' - --help
11

En fait, vous pouvez simplement lancer le nom ou même le numéro:

-n, --name PATTERN               Filter run on /pattern/ or string.

par exemple:

Ruby spec/stories/foo_spec.rb --name 3

FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil

Voir: https://github.com/seattlerb/minitest

7
Rimian

Si vous utilisez Turn gem avec minitest, assurez-vous d'utiliser l'option Turn.config.pattern car Turn Run run ne respecte pas l'option --name dans les fichiers ARG.

1
Laknath

Après travaillera

def test_abc
end

test "hello world"
end

Cela peut fonctionner par

bundle exec Ruby -I test path/to/test -n test_abc

bundle exec Ruby -I test path/to/test -n test_hello_Word
0
Bibin Venugopal

J'utilise Ruby /path/to/test -n /distinguishable Word/

Edit: -n est un raccourci pour --name. distinguishable Word peut être n'importe quelle chaîne insérée dans la description du test. J'utilise généralement un mot aléatoire qui, à ma connaissance, ne figurera pas dans la description des autres tests.

0
sloneorzeszki

Je recherche des fonctionnalités similaires à:

chemin rspec/to/fichier_test.rb -l 25

Il y a une gemme qui fait exactement cela: minitest-line.

gem install minitest-line
Ruby test/my_file -l 5

de https://github.com/judofyr/minitest-line#minitest-line

0
knugie