如何测试从控制台登录的Rails?

aro*_*ick 7 ruby ruby-on-rails

我有一段时间想知道如何使用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
Run Code Online (Sandbox Code Playgroud)

请注意,上述内容意味着您在失败的身份验证请求后重定向,以及您在登录后重定向.

为确保将夹具加载到测试环境DB中(通常在rake测试期间发生),请确保执行以下操作:

 rake db:fixtures:load RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)

(来自Patrick Richie)默认URL将显示为"www.example.com",因为此默认主机在ActionController :: Integration :: Session中设置

ActionController::Integration::Session.new.host=> "www.example.com"
Run Code Online (Sandbox Code Playgroud)

它在actionpack/lib/action_controller/integration.rb#75中设置

要在集成测试中更改它,请执行以下操作:

session = open_session do |s|  s.host = 'my-example-host.com' end
Run Code Online (Sandbox Code Playgroud)

Pat*_*hie 3

“www.example.com”是 ActionController::Integration::Session 中设置的默认主机

>> ActionController::Integration::Session.new.host
=> "www.example.com"
Run Code Online (Sandbox Code Playgroud)

它在actionpack/lib/action_controller/integration.rb#75中设置

您应该能够通过执行以下操作在集成测试中更改它:

session = open_session do |s|
  s.host = 'my-example-host.com'
end
Run Code Online (Sandbox Code Playgroud)