¿Cómo ejecutar una sola prueba desde un conjunto de pruebas de rails?


Respuestas:


158

NOTA: Esto no ejecuta la prueba a través de rake. Entonces, cualquier código que tenga RakefileNO se ejecutará.

Para ejecutar una sola prueba, use el siguiente comando del directorio principal de su proyecto rails:

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

Esto ejecuta una única prueba llamada "nombre", definida en la clase MyModelTest en el archivo especificado. Test_name se forma tomando el nombre de la prueba, precediéndola con la palabra "test" y 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 solo la segunda prueba a través de

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

44
Esto no funciona para mí (en pruebas funcionales o unitarias). Consigo 0 tests, 0 assertions, 0 failures, 0 errors. Rieles 3.0.7.
B Seven

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

44
Es importante tener en cuenta que para que esto funcione, no debe estar en el directorio PRINCIPAL como se especifica en la respuesta, sino en el subdirectorio que contiene la test/carpeta. Por ejemplo, si quiero ejecutar la prueba activesupport/test/core_ext/array_ext_test.rb, debería estar activesupport/primero.
Vincent B.

3
@Groxx - ¡Finalmente una solución! ¡Gracias! -n "/good/"trabajó.
B Seven

Tenga cuidado al ejecutar esto en 2018+. Omite algunas tareas de prueba integradas en rails (como db: test: prepare) que se usan para muchas cosas, como intercambiar datos locales por datos de accesorios y restaurarlos nuevamente. Ejecutar esto voló mi base de datos local. Considere una solución que utiliza las tareas de prueba de rieles incorporadas, como stackoverflow.com/a/47006811/1154642 (que funcionó para mí).
bryanbraun

100

Ejecute un archivo de prueba :

rake test TEST=tests/functional/accounts_test.rb

Ejecute una sola prueba en un archivo de prueba:

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

(Del comentario de @Puhlze.)


10
Además, si desea ejecutar una sola prueba en el archivo dado, puede agregar una variable de entorno TESTOPTS que se pasará a la prueba. EG rake test TEST = tests / funcional / accounts_test.rb TESTOPTS = "- n / cuentas pagas /"
Puhlze

1
si el último comando de prueba no funciona, intente rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"(encerrándolo /paid accounts/con comillas simples)
rrw


38

Para rieles 5:

rails test test/models/my_model.rb

9
Pero esto va en todos los casos de prueba en el archivo, la pregunta se refiere a ejecutar una sola prueba ...
user000001

Puede ejecutar una sola prueba agregando un número de línea a un nombre de archivo:bin/rails test test/models/user_test.rb:27
Segfault

30

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. Según la ayuda de rails:

 $ rails test --help

Puede ejecutar una sola prueba agregando 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 su prueba debe heredar de ActionDispatch :: IntegrationTest para que esto funcione (Ese fue mi error):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

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


5

Para ejecutar una sola prueba en la suite Rails real:

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


3

Esa fue una tonta pregunta de medianoche mía. Rails imprime amablemente el comando que está ejecutando 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"

2

Si desea ejecutar una sola prueba, puede ejecutarlas como un script Ruby normal

ruby actionmailer/test/mail_layout_test.rb

También puede ejecutar un conjunto completo (por ejemplo, ActiveRecord o ActionMailer) entrando cden el directorio y ejecutándose rake testallí.


1
No en 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 ("require File.join (File.dirname ( FILE ), '..', 'test_helper')"), entonces su solución funciona.
James A. Rosen el

ejem, eso esrequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen

@Gaius Revisado dos veces. El primero no funciona, pero cdsí funciona. Para ser claros (no estoy seguro si estoy leyendo mal esto, pero dijiste "archivos de prueba generados"), esto es para la biblioteca Rails en sí, no para un proyecto Rails.
Aupajo

2

En mi situación rakesolo funciona TESTOPTS="-n='/sample/'":

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

0

Primero, acceda a la carpeta de la biblioteca que desea probar (esto es importante) y luego ejecute:

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

0

Carpeta Rails

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

Tenga en cuenta que necesita cargar la carpeta apropiada: "activerecord / test" (donde tiene prueba)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.