这是以下环境中控制器规范中的 cookie 集合的问题:
- 导轨 3.1.0.rc4
- rspec 2.6.0
- rspec-rails 2.6.1
我有一个简单的控制器规范,它创建一个工厂用户,调用一个设置 cookie 的登录方法,然后测试登录用户是否可以访问页面。问题是,在设置身份验证 cookie 和在我的控制器上调用“显示”操作之间,所有 cookie 似乎都消失了。
我的代码在 Rails 开发服务器上的浏览器中运行时运行良好。运行规范时更奇怪的行为是,通过 cookie 散列设置的所有内容都消失了,但通过会话散列设置的所有内容仍然存在。我只是错过了使用 rspec 时 cookie 的工作原理吗?
规格代码
it "should be successful" do
@user = Factory(:user)
test_sign_in @user
get :show, :id => @user
response.should be_success
end
登录代码
def sign_in(user, opts = {})
if opts[:remember] == true
cookies.permanent[:auth_token] = user.auth_token
else
cookies[:auth_token] = user.auth_token
end
session[:foo] = "bar"
cookies["blah"] = "asdf"
self.current_user = user
#there are two items in the cookies collection and one in the session now
end
get :show 请求的身份验证检查在此处失败,因为 cookies[:auth_token] 为 nil
def current_user
#cookies collection is now empty but session collection still contains :foo = "bar"... why?
@current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token]
end
这是一个错误吗?这是我不理解的某种预期行为吗?我只是在看一些明显的东西吗?