cómo cambiar la variable de entorno de rieles en las pruebasambiente carriles de cambio a mediados de pruebas
Respuesta
Si está usando algo como rspec, puede stub Rails.env para devolver un valor diferente para el ejemplo de prueba específica se está ejecutando:
it "should log something in production" do
Rails.stub(:env).and_return('production')
Rails.logger.should_receive(:warning).with("message")
run_your_code
end
¿Por qué se bajó este valor? –
Porque solo funciona si realiza comparaciones de cadenas. No se puede usar "de forma nativa", p. ? El siguiente no funciona '' Rails.env.production –
que tenía un tiempo difícil conseguir Rails.stub (: env) para trabajar en los carriles 3.2. No estoy seguro por qué. – fregas
usted podría hacer
Rails.stub(env: ActiveSupport::StringInquirer.new("production"))
Entonces Rails.env
, etc Rails.development?
funcionará como se espera.
Con RSpec 3 o posterior es posible que desee utilizar la nueva sintaxis "cero monkeypatching" (como se ha mencionado por @AnkitG en otra respuesta) para evitar avisos de obsolescencia:
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production"))
por lo general definen un método en stub_env
un asistente de especificaciones, así que no tengo que poner todo eso en línea en mis pruebas.
Una opción a considerar (como se sugiere en a comment here) es confiar en una configuración más específica que puede establecer en los archivos de su entorno y cambiar en las pruebas.
¡Gracias a ti mismo! Encontrado esto y estaba a punto de upvote, entonces di cuenta de lo escribí yo mismo hace 6 meses ... –
funcionaba perfectamente, gracias por publicar este truco. –
Buena respuesta aquí. También creo que, en general, es malo tener lugares en tu código repletos de Rails.env o Rails.desarrollo ?, pero esto me ayudó a agregar cobertura de prueba a algún código heredado. – fregas
Rspec 3 en adelante se puede hacer
it "should do something specific for production" do
allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new("production"))
#other assertions
end
gracias por publicar esto, esta es una sintaxis mejor para rspec> = 3 –
Agregué un depurador justo después de esta declaración, pero cuando probaba mis variables de entorno, todavía las obtenía del entorno incorrecto, no el especificado en el declaración. ¿alguna sugerencia? –
@NoamHacker ¿Qué tipo de depurador? ¿Qué le está dando 'Rails.env'? – AnkitG
A veces regresaba de una variable de entorno diferente puede ser un dolor de cabeza (variables de entorno de producción requeridos, los mensajes de advertencia, etc.).
Dependiendo de su caso, como una alternativa que puede ser capaz de volver simplemente el valor que necesita para su prueba a pensar que es en otro entorno. Tal como si quisiera rieles a creer que es en la producción de código que comprueba Rails.env.production?
se podría hacer algo como esto:
it "does something specific when in production" do
allow(Rails.env).to receive(:production?).and_return(true)
##other assertions
end
Se podría hacer lo mismo para otros entornos, tales como :development?
, :staging?
, etc Si usted no necesita la capacidad total de devolver un entorno completo, esta podría ser otra opción.
Agradable y simple - ¡Gracias! – house9
Como una variante más simple en varias respuestas anteriores, esto es trabajo para mí:
allow(Rails).to receive(:env).and_return('production')
O, por lo que estoy haciendo en shared_examples, pase que en una variable:
allow(Rails).to receive(:env).and_return(target_env)
Sospecho que esto no llega a la solución ...StringInquirer...
ya que su aplicación utiliza métodos adicionales para inspeccionar el entorno (por ejemplo, env.production?
, pero si el código solo solicita Rails.env
, esto es mucho más legible. YMMV.
- 1. delayed_job no recoger el medio ambiente carriles
- 2. carriles distribuidos pruebas en paralelo
- 3. carriles asociaciones de cambio de nombre
- 4. Pruebas de carriles vistas parciales independiente
- 5. caso carriles de cambio en la vista
- 6. iSight Sensor de ambiente
- 7. Prueba de Google Analytics/ambiente de sandbox?
- 8. Cambio del parámetro id en los carriles de enrutamiento
- 9. espacios en blanco de retoque desde mediados de cadena
- 10. carriles de 3,2 migración no puede poner índice a CREATE_TABLE en el método de cambio
- 11. Scala - Inicializar ambiente REPL
- 12. Griales ambiente encargo
- 13. ambiente facetadas Proyecto Eclipse
- 14. cambio de orden de pruebas unitarias en Python
- 15. Cambio formulario HTML ID generado por form_for carriles 3.1
- 16. preservar el medio ambiente sudo
- 17. ¿Es posible mover la ejecución de un delegado de un hilo a otro a mediados de ejecución?
- 18. carriles de muchos a muchos auto unen
- 19. cómo cambiar carriles a modo de desarrollo
- 20. Agregar a carriles autoload_path de Gem
- 21. jQuery posterior a los carriles
- 22. MAC OS X: MAMP Medio Ambiente y de máquinas virtuales
- 23. Pruebas de penetración frente a otras pruebas de seguridad
- 24. carriles - rspec - ¿Cómo puedo ejecutar todas las pruebas de integración, similar al rastrillo de especificaciones: modelos
- 25. Cambio de atributos href con nokogiri y el rubí en los carriles
- 26. cambio de log4j a logback
- 27. Cambio de INT a BigInt
- 28. Cambio de prototipo a jQuery
- 29. Detección automática ambiente interno/externo desarrollo
- 30. Carriles 3 - Pruebas método GET del controlador - tratando de usar JSON y conseguir errores 406
Esta es probablemente una mala idea. –