实际上,我所寻找的一切都在标题中说明了——我需要在测试中访问管理员用户变量,以检查身份验证是否有效。另一种方式对我来说也是可能的,只是试着很好地测试身份验证:)
should "authenticate" do
post "/login", {:login => "test_login", :password => "password"}, {"HTTP_HOST" => "test.host"}
assert last_response.redirect?
assert_equal last_response.env["warden"].user.login, "test_login"
end
在机架测试风格的全栈测试中,您无法进入内部请求环境。如果你想验证你已经以特定用户的身份登录,你需要查看重定向URL(如果它重定向到用户可识别的URL)或遵循重定向(使用rack-test
的follow_redirect!
助手很容易),然后在HTML中查找用户ID的证据。
我本以为你并不真的需要测试Warden本身,但你需要确保你向它提供了正确的信息,而不是在中间件堆栈中破坏它。
你可能会发现像Cucumber这样的东西可以方便地进行真正的表格填写和提交。
最后,Warden有自己的测试助手(肯定可以与rack-test
一起使用),因此您可以设置登录请求,而无需在每个测试中实际运行登录请求/重定向周期https://github.com/hassox/warden/wiki/testing有更多详细信息。