Estoy tratando de escribir pruebas de integración con rspec, factory_girl & capybara. También tengo el pepino instalado, pero no lo estoy usando (que yo sepa).Probando sesiones en Rails 3 con Rspec & Capybara
Básicamente quiero rellenar el archivo db con mi usuario, luego ir a la página de inicio e intentar iniciar sesión. Debería redirigir a user_path (@user).
Sin embargo, las sesiones no parecen persistir en mis pruebas/rspec/requests/integration.
mi especificación: /rspec/requests/users_spec.rb
require 'spec_helper'
describe "User flow" do
before(:each) do
@user = Factory(:user)
end
it "should login user" do
visit("/index")
fill_in :email, :with => @user.email
fill_in :password, :with => @user.password
click_button "Login"
assert current_path == user_path(@user)
end
end
Devuelve:
Failures:
1) User flow should login user
Failure/Error: assert current_path == user_path(@user)
<false> is not true.
# (eval):2:in `send'
# (eval):2:in `assert'
# ./spec/requests/users_spec.rb:16
su lugar, se vuelve a dirigir a mi please_login_path - lo que debería ocurrir si el inicio de sesión falla por cualquier motivo (o si la sesión [: user_id] no está configurada).
Si intento poner session.inspect, falla como un objeto nulo.
Si trato de hacer esto en el controlador comprueba (/rspec/controllers/sessions_spec.rb), que se puede acceder a la sesión sin ningún problema, y puedo llamar a sesión [: user_id]
No sé si esto está relacionado, pero no debería poder obtener la contraseña de un usuario escribiendo @ user.password. Esta es una vulnerabilidad de seguridad en su aplicación. ¿Estás almacenando las contraseñas usando texto sin formato? –
No está relacionado, y probablemente no sea una vulnerabilidad de seguridad. La llamada a # contraseña solo devuelve una contraseña porque está establecida en la variable de instancia por Fábrica. Es probable que esté usando Devise o algo similar que no persista en el atributo de contraseña para el db en texto claro, por lo que no estaría disponible si esa variable de instancia desapareciera. –