【发布时间】:2016-01-28 19:27:44
【问题描述】:
在 Rails 教程第 8 章中,测试了“记住我”复选框是否有效。
在真正的比赛中,如果用户选中登录页面中的“记住我”复选框,则登录后会话控制器的创建操作会使用 remember(user) 帮助器,它会为用户创建一个 remember_token 并更新用户模型中的remember_digest 属性(通过user.rb 中的remember 方法),然后设置cookies[:user_id] = user.id 和cookies[:remember_token] = user.remember_token。
这本书说在测试中“理想情况下,我们会检查 cookie 的值是否等于用户的记忆令牌,但按照目前的设计,测试无法访问它:控制器中的用户变量有一个记住令牌属性,但是(因为 remember_token 是虚拟的)测试中的 @user 变量没有”。
测试定义如下:
def setup
@user = users(:michael)
end
test "login with remembering" do
log_in_as(@user, remember_me: '1')
assert_not_nil cookies['remember_token']
end
首先,考虑到cookies['remember_token']是如何定义的(cookies[:remember_token] = user.remember_token),如果确实无法访问remember token属性,我想知道如何检查cookies['remember_token']不为零。
虽然夹具没有为用户 michael 定义任何记忆令牌,但 log_in_as 测试助手方法被定义为向 login_path 发布 params[:session] 的正确值,所以我想知道:这些值不是被采用的吗通过会话控制器的创建操作?如果是这种情况,那么创建动作应该和上面描述的真实比赛一样做同样的工作:remember(user) 助手将为用户创建一个remember_token,我们可以检查是否cookies['remember_token'] = user.remember_token。
我不明白为什么我们不能访问user.remember_token。
【问题讨论】:
标签: ruby-on-rails railstutorial.org