Problemas con test funcional


#1

Hola a todos,

Tengo un filtro para una autenticación básica, la del Agile, que
redirige en caso de que no envíen el id del usuario como variable de
sesión. Este es:

def authorize
@p=Person.find_by_id(session[:person_id])
unless @p
flash[:notice] = “Please log in”
redirect_to(:controller => “login” , :action => “login” )
end
end

El problema es que en el test funcional me redirige aún cuando le paso
la variable adecuadamente (¿no?):

p = Person.find(:first)
assert p!=nil
get :index, {}, { :person_id => p.id }
assert_response :success

El primer assert confirma que p existe, pero aún así el assert_response
falla porque redirige. Da el siguiente error:

  1. Failure:
    test_index_with_user(HomeControllerTest)
    [/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/assertions/response_assertions.rb:26:in
    assert_response' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/assertions/response_assertions.rb:18:inassert_response’
    test/functional/home_controller_test.rb:27:in
    `test_index_with_user’]:
    Expected response to be a <:success>, but was <302>

Y en log/test.log aparece:

Processing HomeController#index (for 0.0.0.0 at 2007-05-06 14:13:15)
[GET]
Session ID:
Parameters: {“action”=>“index”, “controller”=>“home”}
Person Load (0.000317) SELECT * FROM people WHERE (people.id IS
NULL) LIMIT 1
Redirected to http://test.host/login/login

¿Alguna idea? Gracias.


#2

On 5/6/07, Héctor removed_email_address@domain.invalid wrote:

  flash[:notice] = "Please log in"
assert_response :success
 test/functional/home_controller_test.rb:27:in

Person Load (0.000317) SELECT * FROM people WHERE (people.id IS
NULL) LIMIT 1
Redirected to http://test.host/login/login

¿Alguna idea? Gracias.

El tercer parámetro de get son los headers, no los valores de la
sesión. Para meter datos en la sesión deberías utilizar una línea como

@request.session[:person_id] = p.id

antes de utilizar get.


#3

On 5/7/07, Héctor removed_email_address@domain.invalid wrote:

Gracias por tu respuesta Daniel.

Me sigue dando el mismo error. ¿Cómo podría asegurarme que envío los
datos de la sesión?

@request.session[:person_id] = p.id
assert @request.session[:person_id]==p.id
get :index, {}, { :person_id => p.id } # ó get :index, {}, {} ; el
resultado es el mismo
assert_response :success

Prueba poniendo en tu controlador antes de la línea del find:

log.debug session.inspect

Y mira el test.log a ver que aparece. Debería aparecer el valor de
:person_id, si no aparece… pues no tengo más idea de lo que puede
ser.


#4

log.debug session.inspect
no me iba; he tenido que poner:
logger.debug session.inspect

Definitivamente no guarda el valor en la sesión. En log/test.log
aparece:

#<ActionController::TestSession:0xb755a55c @attributes={“flash”=>{}},
@session_id="", @saved_attributes=nil>

Bueno, ya miraré (dejo de testear por ahora :wink: De todas formas, gracias
por tu ayuda.

Saludos,

Héctor.


#5

Gracias por tu respuesta Daniel.

Me sigue dando el mismo error. ¿Cómo podría asegurarme que envío los
datos de la sesión?

@request.session[:person_id] = p.id
assert @request.session[:person_id]==p.id
get :index, {}, { :person_id => p.id } # ó get :index, {}, {} ; el
resultado es el mismo
assert_response :success