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:
¿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.¿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.
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