"记住我"复选框的集成测试失败

ril*_*ham 8 ruby cookies ruby-on-rails session-cookies railstutorial.org

我正在关注railstutorial.org第3版,我目前正致力于第8章:登录,注销.

我在代码清单8.51中找到了一个问题(登录时没有记住测试):

assert_nil cookies['remember_token']
Run Code Online (Sandbox Code Playgroud)

当我执行:时rake test,它返回RED并出现以下错误:

FAIL["test_login_without_remembering", UsersLoginTest, 1.268578948]
 test_login_without_remembering#UsersLoginTest (1.27s)
    Expected "" to be nil.
    test/integration/users_login_test.rb:46:in `block in      <class:UsersLoginTest>'
Run Code Online (Sandbox Code Playgroud)

否则,当我更改为以下代码时,它将返回GREEN并且登录 - 注销过程正常工作.

assert_not_nil cookies['remember_token']
Run Code Online (Sandbox Code Playgroud)

任何面临同样问题的人都能解释这个案子吗?

谢谢.

小智 22

我犯了这个错误......

TL; DR; remember user从中移除sessions_controller.rb


看一下代码清单8.34.你会发现 remember usersession_controller.rb.

现在参考同一个文件,看一下代码清单8.49.作者对此行做了大量的介绍,但是如果你只是粘贴它而不删除调用remember user,那么令牌仍会生成.

所以,当粘贴在这一行:

params[:session][:remember_me] == '1' ? remember(user) : forget(user)

确保它正在替换呼叫remember user.