2009-10-01 6 views

Respuesta

105

NOTA:Esto no se ejecuta la prueba a través de rake. Por lo tanto, cualquier código que tenga en Rakefile NO se ejecutará.

para ejecutar una sola prueba, utilice el siguiente comando desde el directorio principal de su raíles del proyecto:

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

Esto va en una sola prueba llamado "nombre", definido en la clase MyModelTest en el archivo especificado. El test_name se forma tomando el nombre de la prueba, anteponiéndolo con la palabra "test", luego separando las palabras con guiones bajos. Por ejemplo:

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 

Puede ejecutar ambas pruebas a través de:

ruby -I test test/unit/my_model_test.rb 

y sólo la segunda prueba a través de

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

¿Funciona esto con pruebas funcionales? Rails 3? –

+3

Esto no funciona para mí (en pruebas funcionales o de unidad). Obtengo '0 pruebas, 0 aserciones, 0 fallas, 0 errores'. Rails 3.0.7. –

+7

Personalmente, soy un fanático de la forma de expresiones regulares: '-n"/good/"'. El escape de Shell siempre es divertido, por lo que tiendo a usar expresiones regulares sencillas, pero es mucho más fácil que escribir el nombre completo de la prueba todo el tiempo. – Groxx

1

Si desea ejecutar una sola prueba, sólo puede funcionar como una escritura regular Rubí

ruby actionmailer/test/mail_layout_test.rb 

También puede ejecutar un conjunto completo (por ejemplo. ActiveRecord o ActionMailer) por cd -ing en el directorio y ejecutando rake test adentro de allí.

+1

Not in Rails - al menos no con los archivos de prueba predeterminados generados. Tienen "require 'test_helper'" en la primera línea, pero la ruta de carga no se habrá configurado a tiempo. Si cambia cada primera línea a un requerimiento explícito ("requiere File.join (File.dirname (__ FILE__), '..', 'test_helper')"), entonces su solución funciona. –

+0

ahem, eso es 'requiere File.join (File.dirname (__ FILE__), '..', 'test_helper')' –

+0

@Gaius Doble-marcado. El primero no funciona, pero 'cd' -ing in does. Para ser claros (no estoy seguro de si estoy leyendo mal esto, pero dices "archivos de prueba generados"), esto es para la biblioteca de Rails en sí, * no * un proyecto de Rails. – Aupajo

3

Esa era una pregunta tonta de la medianoche de la mía. Rails imprime amablemente el comando que está ejecutando al rake test. El resto es un ejercicio de cortar y pegar.

~/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" 
5

para ejecutar una sola prueba en la suite de rieles real:

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

ejecutar un archivo prueba:

rake test TEST=tests/functional/accounts_test.rb 

Ejecutar un sola prueba en un archivo de prueba:

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

(Del comentario de @Puhlze.)

+8

Además, si desea ejecutar una única prueba en el archivo dado, puede agregar un entorno TESTOPTS var que se pasará a la prueba. P.EJ. rake test TEST = tests/functional/accounts_test.rb TESTOPTS = "- n/cuentas pagas /" – Puhlze

+0

Si usa bundler, esta es una buena forma de hacerlo. –

+0

si el último comando de prueba no funciona, intente 'rake test TEST = tests/functional/accounts_test.rb TESTOPTS =" - n '/ cuentas pagas /' "' (adjuntando '/ cuentas pagas /' con comillas simples) – rrw

10

Para carriles 5:

rails test test/models/my_model.rb 
+4

Pero esto ejecuta todos los casos de prueba en el archivo, la pregunta requiere ejecutar una sola prueba ... – user000001

0

En primer lugar, acceder a la carpeta de la lib que desea probar (esto es importante) y luego ejecutar:

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

En los carriles 5,

He utilizado esta forma de ejecutar el archivo de prueba individual (todas las pruebas en un archivo)

rails test -n /TopicsControllerTest/ -v 

mira aquí https://stackoverflow.com/a/41183694/3626659

+1

esta es la mejor respuesta a la pregunta para las versiones recientes de rieles, +1 – user000001

5

Gracias a @ James, la respuesta parece ser:

rails test test/models/my_model.rb:22 

Suponiendo que 22 es el número de línea de la prueba dada. De acuerdo con rieles Ayuda:

$ rails test --help 

puede ejecutar una sola prueba añadiendo un número de línea a un nombre de archivo:

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

Además, tenga en cuenta que la prueba debe heredar de ActionDispatch: : IntegrationTest para que esto funcione (ese fue mi error):

class NexApiTest < ActionDispatch::IntegrationTest 
. 
. 
. 
+1

Esta parece ser la mejor respuesta basada en las guías Rails, en al menos para probar una línea específica. – tfantina

Cuestiones relacionadas