2008-11-08 21 views
29

Como título.ejecución de unidad de rieles individuales/prueba funcional

ruby ​​test/functionalals/whatevertest.rb no funciona, eso requiere que cambie todos require 'test_helper' a require File.dirname(__FILE__) + '/../test_helper'. Por alguna razón, la mayoría de esas plantillas de prueba tienen ese problema, así que prefiero ver si hay algún truco que pueda solucionar.

Respuesta

9

En Linux? ¿por qué no probar (cd test && ruby functionals/whatevertest.rb). Tenga en cuenta que los paréntesis son importantes ya que, de lo contrario, su directorio actual cambiará al subdirectorio. Lo que hace es fork otro intérprete de comandos, cambie al subdirectorio en él y ejecute la prueba.

+0

esa es una buena. Cambié un poco a (prueba de cd && ruby ​​functional/whatsoevertest.rb) para que funcione correctamente con la estructura de directorio relativa. Tiene perfecto sentido :) –

+0

Actualizado con su solución. – tvanfosson

13

Prueba esto:

rubí -Ilib: test test/funcionales/whatevertest.rb

+4

Realmente lo ejecuto con: ruby ​​-I test test/functional/whatevertest.rb pero termina siendo lo mismo. – Daemin

4

La respuesta a la pregunta del título sería:

ruby unit/post_test.rb -n selected_test # use to run only one selected test 

pero para el cuerpo de la cuestión tvanfosson dio una buena respuesta.

+0

Recibí el siguiente error: ': 29: en' require ': no ​​se carga ese archivo - test_helper (LoadError) '¿Funciona con la prueba funcional? –

+0

Debería funcionar. –

+0

Ese es el error que recibo en Rails 3.0.7. –

48

La siguiente respuesta se basa en: How to run single test from rails test suite? (stackoverflow)

Pero muy brevemente, aquí está la respuesta:

ruby -I test test/functional/whatevertest.rb 

Para una determinada prueba functional, ejecute:

ruby -I test test/functional/whatevertest.rb -n test_should_get_index 

Simplemente ponga guiones bajos en los lugares de espacios en los nombres de prueba (como arriba), o cite el título de la siguiente manera :

ruby -I test test/functional/whatevertest.rb -n 'test should get index' 

Tenga en cuenta que para unit pruebas basta con sustituir con functionalunit en los ejemplos anteriores. Y si usted está usando bundler para gestionar las dependencias de la gema de su aplicación, que tendrá que ejecutar las pruebas con bundle exec de la siguiente manera:

bundle exec ruby -I test test/unit/specific_model_test.rb 
bundle exec ruby -I test test/unit/specific_model_test.rb -n test_divide_by_zero 
bundle exec ruby -I test test/unit/specific_model_test.rb -n 'test divide by zero' 

más importante, tenga en cuenta que el argumento de que el interruptor es -nel nombre de la prueba, y la palabra "prueba" antepuesta a ella, con espacios o guiones bajos dependiendo de si está citando el nombre o no. La razón es que test es un método de conveniencia. Los dos métodos siguientes son equivalente:

test "should get high" do 
    assert true 
end 

def test_should_get_high 
    assert true 
end 

... y se pueden ejecutar como ya sea de los siguientes (que son equivalente):

bundle exec ruby -I test test/integration/misc_test.rb -n 'test should get high' 
bundle exec ruby -I test test/integration/misc_test.rb -n test_should_get_high 
+0

Gracias fue útil. El directorio estándar es: prueba/funcional/en lugar de prueba/funcional/así que edité tu respuesta. Gracias – vdaubry

+0

Vaya ... gracias por la edición! Debo haber deslizado erróneamente el _s_ allí porque a veces ejecuto solo las pruebas funcionales a través de 'bundle exec rake test: functionals', que es plural. Nota: lo mismo para ejecutar todas las pruebas unitarias. Simplemente reemplace 'functionals' con' units'. – user664833

+3

Esto no funcionó para mí en Rails 3.0.7. Ejecuta 0 pruebas. –

0

método más convencional para 2 y 3 es:

ruby ​​-I test test/functional/your_test_file.rb

4

Después de pasar horas y horas en esto, finalmente encontré la solución (en Rails 3.0.7):

ruby -I test test/functional/users_controller_test.rb -n "/the_test_name/" 

Nota, esto sólo funciona con guiones bajos (_) en el comando. ¡No funciona con espacios!

Definir la prueba con espacios como:

test "the test name" do 

Esta solución utiliza la coincidencia de patrones, para que pueda utilizar parte del nombre de la prueba. Si la prueba es "should do foo", cualquiera de las siguientes opciones también funcionará.

ruby -I test test/functional/alerts_controller_test.rb -n "/foo/" 
ruby -I test test/functional/alerts_controller_test.rb -n "/do_foo/" 

La siguiente (con espacios) no funcionará:

ruby -I test test/functional/alerts_controller_test.rb -n "/do foo/" 
+1

Descubrí que si escapas de "espacio" en el patrón Funcionará. Entonces algo así ** funciona **: ruby ​​-I test test/my_test.rb -n "/ do \ foo /" –

+0

por alguna razón dejando los espacios trabajados para mí, estoy 'ruby -v ruby ​​1.9 .3p484' y '>> Rails :: version =>" 2.3.18 "' – SuckerForMayhem

5

Si usted está en los carriles 4, a continuación, el rastrillo apoya las alegaciones archivo/directorio. Ejemplo:

rake test test/unit/user_test.rb 
rake test test/unit 
Cuestiones relacionadas