コンソールからの Rails ログインをテストするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/44619

  •  09-06-2019
  •  | 
  •  

質問

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.new.host=> "www.example.com"

actionpack/lib/action_controller/integration.rb#75 に設定されています

統合テストでこれを変更するには、次の手順を実行します。

session = open_session do |s|  s.host = 'my-example-host.com' end
役に立ちましたか?

解決

「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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top