Como faço para testar o login do Rails no console?
-
09-06-2019 - |
Pergunta
Eu estava tendo muita dificuldade para descobrir como fazer login e logout usando objetos de resposta do Rails.Os blogs padrão estavam ok, mas finalmente consegui diagnosticar e queria registrar aqui.
app.get '/'
assert_response :success
app.get '/auth_only_url'
assert_response 302
user = User.find(:user_to_login)
app.post '/signin_url',
:user_email => user.email,
:user_password => '<password in clear>'
assert_response 302
app.follow_redirect!
assert_response :success
app.get '/auth_only_url'
assert_response :success
Observe que o que foi dito acima implica que você redirecione após uma falha na solicitação de autenticação e também que você redirecione após fazer login.
Para garantir que você carregue os fixtures em seu banco de dados do ambiente de teste (o que normalmente ocorre durante o teste rake), certifique-se de executar o seguinte:
rake db:fixtures:load RAILS_ENV=test
(De Patrick Richie) O URL padrão parecerá 'www.example.com', como este host padrão como definido no ActionController :: Integration :: Session
ActionController::Integration::Session.new.host=> "www.example.com"
Está definido em actionpack/lib/action_controller/integration.rb#75
Para alterá-lo no teste de integração, faça o seguinte:
session = open_session do |s| s.host = 'my-example-host.com' end
Solução
'www.example.com' é o host padrão conforme definido em ActionController::Integration::Session
>> ActionController::Integration::Session.new.host
=> "www.example.com"
Está definido em actionpack/lib/action_controller/integration.rb#75
Você poderá alterá-lo em seu teste de integração fazendo o seguinte:
session = open_session do |s|
s.host = 'my-example-host.com'
end