2010-01-19 11 views

Respuesta

31

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 
1

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.

+0

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

1

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.

0

Usando joya "mocha" que puede hacer:

test "should something" do 
    request.expects(:remote_ip).returns("189.81.139.183") 
    ... 
end 
Cuestiones relacionadas