Algunas funciones en mi aplicación funcionan de manera diferente según la dirección IP del cliente. ¿Hay alguna manera de probar eso en las pruebas funcionales de Rails? Estoy usando Test :: Unit y Shoulda.En las pruebas de controlador de Rails, ¿hay alguna forma de simular una IP remota específica?
Respuesta
Puede hacerlo fácilmente sin trozos, cambiando la variable de entorno REMOTE_ADDR antes de la llamada de su controlador. Aquí hay un controlador de ficción que redirige al usuario a la ruta a casa si su dirección IP es 1.2.3.4:
def index
if request.remote_ip == '1.2.3.4'
redirect_to root_path
return
end
@articles = Article.all
end
Así es como se puede comprobar que funciona:
def test_should_reject_ip_1_2_3_4
@request.env['REMOTE_ADDR'] = '1.2.3.4'
get :index
assert_redirected_to root_path
end
está configurando el control remoto ip antes de la llamada del controlador, por lo que puedes falsificar esos datos sin ningún plugin o gema especial. Y aquí está la versión la debería, por ItemsController:
context "with ip 1.2.3.4" do
setup do
@request.env['REMOTE_ADDR'] = '1.2.3.4'
get :index
end
should_not_assign_to :items
should_redirect_to("home"){home_path}
should_not_set_the_flash
end
El controlador receptor necesita un método para detectar la dirección IP (o recibirla como parámetro), y necesita una forma de inyectar una dirección IP específica para su prueba, o simplemente especificando la dirección IP de prueba como un parámetro para el método.
Si no es fácil considerando lo que haga su aplicación, lo que podría hacer es aplicar la "funcionalidad personalizada" a otra computadora en su red doméstica, si tiene una, y probar la aplicación de esa manera. Sin embargo, eso realmente no resuelve la respuesta de "resuélvalo a través de una prueba de unidad".
¿Puedo preguntar por qué su aplicación realizaría una acción específica dependiendo de la dirección IP? Quizás hay otra manera.
Debería poder lograr esto anulando las solicitudes y devolviendo un objeto simulado que tiene request.remote_ip
igual a la dirección IP deseada.
Me gustaría ver FakeWeb para obtener ayuda sobre esto. Le permite configurar fácilmente las solicitudes/respuestas esperadas. También podría ser instructivo ver cómo Rails en sí does these kinds of tests.
Usando joya "mocha" que puede hacer:
test "should something" do
request.expects(:remote_ip).returns("189.81.139.183")
...
end
- 1. ¿Hay alguna forma de simular eventos táctiles en Windows 8
- 2. ¿Hay alguna forma de automatizar las pruebas de Windows Forms?
- 3. ¿Hay alguna forma de hacer ping a una dirección IP específica con C?
- 4. ¿Hay alguna forma de adjuntar la solicitud de Ruby Net :: HTTP a una dirección IP/interfaz de red específica?
- 5. ¿Hay alguna forma de escribir pruebas para 500 páginas de error en Rails?
- 6. ¿Alguna manera de simular el servidor F5 BIG-IP?
- 7. ¿Hay alguna forma de ejecutar las aplicaciones de Ruby on Rails en una caja de Windows?
- 8. ¿Hay alguna forma de ejecutar las pruebas unitarias de forma secuencial con MSTests?
- 9. Rails 3 llamadas de forma remota AJAX
- 10. Clear Rails forma remota después de enviar
- 11. ¿Hay alguna forma de * prevenir * que ReSharper ejecute las pruebas unitarias de ensamblaje en paralelo?
- 12. ¿Hay alguna forma de ejecutar un script de python en una máquina remota sin enviarlo?
- 13. JUnit: ¿Cómo simular las pruebas de System.in?
- 14. ¿Hay setup_class/teardown_class para las pruebas de Rails?
- 15. ¿Hay alguna forma en Visual Studio de no interrumpir el lanzamiento de una excepción específica?
- 16. ¿Hay alguna manera de hacer que las pruebas de refresco fallen en pruebas indefinidas?
- 17. ¿Hay alguna manera de eliminar una cookie HttpOnly de las pruebas de C# Selenium?
- 18. ¿Cómo simular lanzando una excepción en las pruebas unitarias?
- 19. Python: obtenga la dirección IP local utilizada para enviar datos IP a una dirección IP remota específica
- 20. Rails 3 forma remota: ¿Cómo especifico el tipo de contenido?
- 21. ¿hay alguna forma de desactivar la optimización del compilador para una línea de código específica?
- 22. ¿Hay alguna forma de simular GROUP BY WITH CUBE en MySql?
- 23. ¿Hay alguna forma de filtrar las palabras ofensivas de Jcaptcha?
- 24. RSpec> ¿Hay alguna forma de ejecutar todas las pruebas con un solo comando?
- 25. ¿Cómo puedo simular errores de TCP/IP?
- 26. ¿Hay alguna forma de simular un tipo "Quizás" u "opción" en Ir?
- 27. ¿Hay alguna forma de enumerar las señales de Django?
- 28. Netty: obtener dirección IP remota en messageReceived
- 29. ¿Hay alguna forma de currying en C?
- 30. Perfilando de forma remota una JVM
Por qué la detección de IP: la aplicación muestra los diferentes elementos de la interfaz en función de si el usuario en el interior o fuera de nuestro red local. – Ethan