Rails の応答オブジェクトを使用してログインおよびログアウトする方法を理解するのにかなりの時間を費やしていました。標準のブログは大丈夫でしたが、最終的に診断したので、ここに記録したいと思いました。
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
上記は、認証リクエストが失敗した後にリダイレクトすること、およびログイン後にリダイレクトすることを意味することに注意してください。
フィクスチャをテスト環境の DB に確実にロードするには (通常は rake テスト中に発生します)、以下を実行してください。
rake db:fixtures:load RAILS_ENV=test
(Patrick Richie より) デフォルトの URL は 'www.example.com' のように見えます。このデフォルトのホストは ActionController::Integration::Session で設定されているためです。
ActionController::Integration::Session.new.host=> "www.example.com"
actionpack/lib/action_controller/integration.rb#75 に設定されています
統合テストでこれを変更するには、次の手順を実行します。
session = open_session do |s| s.host = 'my-example-host.com' end