2009-06-26 15 views
106

Antecedentes: 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 ir allí son hacer ...¿Cómo ejecutar la consola de Rails en el entorno de prueba y cargar test_helper.rb?

>> Factory(:user).inspect 

Sé que puede ejecutar la consola en diferentes ambientes ...

$ script/consola RAILS_ENV = prueba

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

He intentado varias llamadas require uno de ellos con la ruta absoluta al 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.

+1

En consecuencia si se había colocado la RAILS_ENV = prueba antes de la escritura/consola, habría funcionado como era de esperar . – Jared

Respuesta

165

para los carriles < 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: Es realmente extraño que los diversos binarios en script/tengan diferentes formas de configurar el entorno de los rieles.

para los carriles 3 y 4

Run rails c test. Anteponga bundle exec si necesita esto para el entorno de la aplicación actual.

+60

En rails 3, es simplemente 'rails console [environment]' –

+26

Es un poco inconsistente porque para iniciar el servidor, escribe 'rails server -e test' – Jason

+0

En Rails 5, esto todavía funciona. Y, debe cargar al menos algunas partes de su entorno; en mi caso, '' 'features/support/helpers.rb''' no se cargó automágicamente. Además, '' 'Rack :: Test''' no está cargado. –

1

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" 
10
script/console test 

debe ser todo lo que necesita.

3

David Smith es correcta, simplemente

script/console test 

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

$ 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 la poco [Entorno].

58

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

0

prueba Env

rails console test # or just rails c test 

Developement Env

rails console # or just rails c 
3

Puede especificar el entorno en el que debe operar el comando de la consola.

rails c [environment] 

Ejemplos

1) para la estadificación

rails c staging 

2) Para Producción

rails c production 

Para una fuente de & descripción detallada: The Rails Command Line

1

Comparto el dolor del asker. En realidad, hay tres preguntas separadas aquí, algunos de los cuales están dirigidos, algunos 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 la prueba/test_helper.rb se cargue en esa sesión de la consola?

    Algo así 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 test_helper típico, 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, se podría invocar esta manera: ActiveSupport::TestCase.new("no idea what this is for").create_user

+0

En lugar de prueba o error, utilice la guía API de rieles para encontrar lo que necesita http://api.rubyonrails.org/classes/ActiveSupport/TestCase.html ...es probable que el orden de prueba sea ': random' por defecto – Mirv

+0

Solo hay dos métodos de clase descritos para ActiveSupport :: TestCase, así que no tengo claro de qué clase/módulo hereda su método' initialize'. Pero parece que el parámetro que espera se almacena como '@ NAME' en el objeto creado. –

Cuestiones relacionadas