ruby-on-rails ruby testing shoulda

ruby on rails - ¿Cómo ejecutar la consola de Rails en el entorno de prueba y cargar test_helper.rb?



ruby-on-rails testing (8)

El trasfondo: Tengo algunos problemas con la gema "Factory Girl" de Thoughtbot, que se usa para crear objetos para usar en unidades y otras pruebas. Me gustaría ir a la consola y ejecutar diferentes llamadas a Factory Girl para ver qué está pasando. Por ejemplo, me gustaría entrar ahí, lo hacen ...

>> Factory(:user).inspect

Sé que puedes ejecutar la consola en diferentes entornos ...

$ script / console RAILS_ENV = prueba

Pero cuando lo hago, la clase de fábrica no está disponible. Parece que test_helper.rb no se está cargando.

test_helper.rb varias llamadas require , incluida una con la ruta absoluta a test_helper.rb pero fallan de manera similar a esto:

$ script/console RAILS_ENV=test >> require ''/Users/ethan/project/contactdb/test/test_helper.rb'' Errno::ENOENT: No such file or directory - /Users/ethan/project/contactdb/config/environments/RAILS_ENV=test.rb

Grr. Argh.


Asegúrese de haber instalado el GEM y de haber agregado la siguiente línea en su archivo environment.rb o test.rb.

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"


Comparto el dolor del asker. En realidad, hay tres preguntas separadas aquí, algunas de las cuales se abordan, otras no:

  1. ¿Cómo se inicia la consola en el entorno de prueba?

    Para versiones recientes de Rails, bundle exec rails c test , o sintaxis alternativas para eso.

  2. ¿Cómo se asegura de que test / test_helper.rb se cargue en esa sesión de consola?

    Algo como require ''./test/test_helper'' debería hacerlo.

    Para mí, esto devuelve verdadero, lo que indica que no estaba cargado cuando inicié la consola. Si esa declaración devuelve falso, entonces solo desperdiciaste unas pocas teclas, pero aún estás listo para continuar.

  3. Una vez que se carga test_helper, ¿cómo se llaman los métodos definidos en él?

    En un típico test_helper, los métodos personalizados se suelen definir como métodos de instancia de ActiveSupport :: TestCase. Entonces, si quiere llamar a uno de ellos, necesita una instancia de esa clase. Por prueba y error, ActiveSupport :: TestCase.new tiene un parámetro requerido, así que ... páselo.

    Si su test_helper tiene un método llamado create_user, puede invocarlo de esta manera: ActiveSupport::TestCase.new("no idea what this is for").create_user


David Smith está en lo correcto, solo hazlo

script/console test

El comando de ayuda mostrará por qué funciona esto:

$ script/console -h Usage: console [environment] [options] -s, --sandbox Rollback database modifications on exit. --irb=[irb] Invoke a different irb. --debugger Enable ruby-debugging for the console.

Es el bit [del entorno] .


En Rails 3, solo realice rails console test o rails console production o el rails console development (que es el valor predeterminado).


Puede especificar el entorno en el que debería funcionar el comando de la consola.

rails c [environment]

Ejemplos

1) Para puesta en escena

rails c staging

2) Para producción

rails c production

Para fuente y descripción detallada: La línea de comandos de rieles


Test Env

rails console test # or just rails c test

Env de desarrollo

rails console # or just rails c


Para Rails <3.0

Run script/console --help . Notará que la sintaxis es script/console [environment] , que en su caso es script/console test .

No estoy seguro de si debe requerir el asistente de prueba o si el entorno de prueba lo hace por usted, pero con ese comando al menos debería poder iniciarse satisfactoriamente en el entorno de prueba.

Como nota al margen: de alguna manera es extraño que los diversos binarios en script / tengan diferentes formas de configurar el entorno de los rieles.

Para los rieles 3 y 4

Ejecute la rails c test . Predecir el ejecutor del bundle exec si lo necesita para el entorno de la aplicación actual.


script/console test

Debería ser todo lo que necesitas