Come eseguire un singolo test da una suite di test delle rotaie?


Risposte:


158

NOTA: questo non esegue il test tramite rake. Pertanto, qualsiasi codice Rakefileinserito NON verrà eseguito.

Per eseguire un singolo test, utilizzare il seguente comando dalla directory principale del progetto rails:

ruby -I test test/unit/my_model_test.rb -n test_name

Ciò esegue un singolo test denominato "nome", definito nella classe MyModelTest nel file specificato. Test_name viene formato prendendo il nome del test, anteponendolo alla parola "test", quindi separando le parole con caratteri di sottolineatura. Per esempio:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

È possibile eseguire entrambi i test tramite:

ruby -I test test/unit/my_model_test.rb

e solo il secondo test via

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes

4
Questo non funziona per me (su test funzionali o unitari). Ho capito 0 tests, 0 assertions, 0 failures, 0 errors. Rotaie 3.0.7.
B Seven

10
Personalmente sono un fan del modulo regex: -n "/good/". L'escape della shell è sempre divertente, quindi tendo a attenermi a regex semplici, ma è molto più facile che scrivere sempre il nome completo del test.
Groxx,

4
È importante notare che per farlo funzionare, non si dovrebbe essere nella directory MAIN come specificato nella risposta ma nella sottodirectory che contiene la test/cartella. Ad esempio, se voglio eseguire il test, activesupport/test/core_ext/array_ext_test.rbdovrei essere il activesupport/primo.
Vincent B.

3
@Groxx - Finalmente una soluzione! Grazie! -n "/good/"lavorato.
B Seven,

Fai attenzione a farlo nel 2018+. Evita alcune attività di test integrate nei binari (come db: test: preparazione) che vengono utilizzate per molte cose, come lo scambio di dati locali con i dati del dispositivo e il ripristino di nuovo. L'esecuzione di questo ha spazzato via il mio database locale. Prendi in considerazione una soluzione che utilizza le attività di test delle guide integrate, come stackoverflow.com/a/47006811/1154642 (che ha funzionato per me).
bryanbraun,

100

Esegui un file di prova :

rake test TEST=tests/functional/accounts_test.rb

Esegui un singolo test in un file di test:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(Dal commento di @Puhlze.)


10
Inoltre, se si desidera eseguire un singolo test nel file specificato, è possibile aggiungere un var TESTOPTS ambiente che verrà passato al test. TEST di prova del rake EG = test / funzionale / accounts_test.rb TESTOPTS = "- n / conti pagati /"
Puhlze

1
se quest'ultimo comando di test non funziona, prova rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"(racchiudendolo /paid accounts/tra virgolette singole)
rrw


38

Per binari 5:

rails test test/models/my_model.rb

9
Ma questo esegue tutti i casi di test nel file, la domanda richiede di eseguire un singolo test ...
user000001

È possibile eseguire un singolo test aggiungendo un numero di riga a un nome file:bin/rails test test/models/user_test.rb:27
Segfault

30

Grazie a @James, la risposta sembra essere:

rails test test/models/my_model.rb:22

Supponendo che 22 sia il numero di riga del test dato. Secondo la guida di rotaie:

 $ rails test --help

È possibile eseguire un singolo test aggiungendo un numero di riga a un nome file:

    bin/rails test test/models/user_test.rb:27

Inoltre, tieni presente che il test dovrebbe ereditare da ActionDispatch :: IntegrationTest affinché funzioni (è stato un mio errore):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
Questa sembra essere la migliore risposta basata sulle guide di Rails, almeno per testare una linea specifica.
tfantina,


5

Per eseguire un singolo test nella suite Rails effettiva:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb


3

Era una mia stupida domanda di mezzanotte. Rails stampa gentilmente il comando su cui sta eseguendo rake test. Il resto è un esercizio di taglia e incolla.

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"

2

Se vuoi eseguire un singolo test, puoi semplicemente eseguirli come un normale script Ruby

ruby actionmailer/test/mail_layout_test.rb

Puoi anche eseguire un'intera suite (ad es. ActiveRecord o ActionMailer) accedendo cdalla directory ed eseguendo rake testal suo interno.


1
Not in Rails - almeno non con i file di test predefiniti generati. Hanno "richiedono 'test_helper'" sulla prima riga, ma il percorso di caricamento non sarà stato impostato in tempo. Se si cambia ogni prima riga in un requisito esplicito ("request File.join (File.dirname ( FILE ), '..', 'test_helper')"), la soluzione funziona.
James A. Rosen,

ahem, questo èrequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen,

@Gaius Doppio controllo. Il primo non funziona, ma cdfunziona. Giusto per essere chiari (non sono sicuro se sto leggendo male questo, ma hai detto "file di test generati"), questo è per la libreria Rails stessa, non un progetto Rails.
Aupajo,

2

Nella mia situazione rakefunziona solo TESTOPTS="-n='/sample/'":

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"

0

Innanzitutto, accedi alla cartella della libreria che desideri testare (questo è importante) e quindi esegui:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 

0

Cartella delle rotaie

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

Nota che devi caricare la cartella appropriata: "activerecord / test" (dove hai test)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.