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

121

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 de Factory Girl para ver qué está sucediendo. Por ejemplo, me gustaría entrar allí ...

>> Factory(:user).inspect

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

$ script / consola RAILS_ENV = prueba

Pero cuando hago eso, la clase Factory no está disponible. Parece que test_helper.rbno se está cargando.

Probé varias requirellamadas, incluida una con la ruta absoluta a, test_helper.rbpero fallaron de manera similar a esta:

$ 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.

Ethan
fuente
1
En consecuencia, si hubiera colocado la prueba RAILS_ENV = antes del script / consola, habría funcionado como era de esperar.
Jared

Respuestas:

192

Para rieles <3.0

Corre script/console --help. Notarás que la sintaxis es script/console [environment], que en tu 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 debería al menos poder iniciar correctamente en el entorno de prueba.

Como nota al margen: De hecho, es un poco extraño que los diversos binarios en script / tengan diferentes formas de configurar el entorno de rieles.

Para rieles 3 y 4

Corre rails c test. Anteponer bundle execsi lo necesita para el entorno actual de la aplicación.

Para rieles 5 y 6

Corre rails console -e test.

Agosto Lilleaas
fuente
63
En rieles 3, es solorails console [environment]
Idris Mokhtarzada
26
Es un poco inconsistente porque para iniciar el servidor que escriberails server -e test
Jason
En Rails 5 esto todavía funciona. Y es necesario cargar al menos algunas partes de su entorno; en mi caso features/support/helpers.rb, no se cargó automáticamente. Además, Rack::Testno está cargado.
Derrell Durrett
61

En Rails 3, simplemente haz rails console testo rails console productiono rails console development(que es el predeterminado).

sivabudh
fuente
10
script/console test

Debería ser todo lo que necesitas.

David Smith
fuente
8

Para Rails 5.2.0: "Pasar el nombre del entorno como un argumento regular está en desuso y se eliminará en la próxima versión de Rails. Por favor, use la opción -e en su lugar".

rails c -e test
Tovi Newman
fuente
4

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

rails c [environment]

Ejemplos

1) Para la 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 Rails

Aamir
fuente
3

David Smith tiene razón, 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 medio ambiente] .

Purplejacket
fuente
2

Comparto el dolor de quien pregunta. Aquí hay realmente tres preguntas separadas, 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 esté cargado en esa sesión de consola?

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

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

  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 definen normalmente como métodos de instancia de ActiveSupport :: TestCase. Entonces, si desea llamar a uno de ellos, necesita una instancia de esa clase. Por ensayo y error, ActiveSupport :: TestCase.new tiene un parámetro obligatorio, 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

Nick Davies
fuente
En lugar de prueba o error, use la guía de la API de rails para encontrar lo que necesita api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... probablemente sea el orden de prueba que está :randompor defecto
Mirv - Matt
Solo existen esos dos métodos de clase descritos para ActiveSupport :: TestCase, por lo que no tengo claro de qué clase / módulo hereda su initializemétodo. Pero parece que el parámetro que espera se almacena como @NAMEen el objeto creado.
Nick Davies
1

Asegúrese de haber instalado 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"
Simone Carletti
fuente
0

Prueba Env

rails console test # or just rails c test

Env del desarrollo

rails console # or just rails c
anyavacy
fuente
0

El comando para ejecutar el entorno de prueba de la consola de rieles es

rails c -e test

o

RAILS_ENV=test rails c

si se enfrenta a un problema como

ActiveRecord::StatementInvalid:
   Mysql2::Error: Table 'DB_test.users' doesn't exist: SHOW FULL FIELDS FROM `users`

entonces primero debe preparar su base de datos de prueba ejecutando

bundle exec rake db:test:prepare
Touseef Murtaza
fuente