我正在尝试测试我的 Rails 3.1 应用程序(我正在学习测试)并且我坚持我如何验证用户,因为通常它会设置一个 session 但测试不使用浏览器所以 session 是一个未定义的方法。我正在使用新的 Rails 3.1 has_secure 密码。
如何正确设置和测试身份验证,以及测试应用中需要用户进行身份验证的部分?
我的设置如下:
rspec 2 capybara guard 工厂女孩
谢谢!
最佳答案
当您进行 Controller 测试时, session 哈希是最后一个参数。假设您在 session Controller 测试中有类似这样的东西:
post :create, :user => { :email => "blah@blah.com" }, :color => "red"
这通过 2 个参数发送到 Controller :params[:user] 和 params[:color]。
session 变量呢? session 变量作为最后一个参数发送。如果我们想设置一个 last_logged_in session 变量,我们会将上面的更改为:
post :create, {:user => { :email => "blah@blah.com" }, :color => "red"}, {:last_logged_in => Time.now}
请注意我在用户和颜色参数周围放置的额外设置大括号。现在您可以在您的 Controller 中访问 session [:last_logged_in]。
我强烈建议阅读 ror 指南。这是关于 Controller 测试的一个: http://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers
关于unit-testing - 测试 Rails 3.1 时验证模拟用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770332/