每个人都过得愉快。 我正在使用Rails Tutorial(3ed)的第8章“登录,注销”
在代码清单8.58中,我在集成测试中有一个Erro。
FAIL["test_current_user_returns_right_user_when_session_is_nil"
--- expected
+++ actual
@@ -1 +1 @@
-#<User id: 762146111, name: "Michael Example", email: "michael@example.com",
created_at: "2014-11-25 08:52:36", updated_at: "2014-11-25 08:52:36",
password_digest: "$2a$04$PqPt.GZHyu3xKlQWh4UJM./y7pEz2w9Twp2XOlg0Eor...",
remember_digest: "$2a$04$hDNgctx0rqYZq9sH4ZO3Lu1MfkfGKtXgdN11Lhv.yVD...">
+nil
test/helpers/sessions_helper_test.rb:11:in `block in <class:SessionsHelperTest>'
在session_helper.rb的这一部分
test "current_user returns right user when session is nil" do
assert_equal @user, current_user #in this line i have an error
assert is_logged_in?
end
我的session_controller.rb
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination' # Not quite right!
render 'new'
end
end
我的session_helper.rb
# Forgets a persistent session.
def forget(user)
user.forget
cookies.delete(:user_id)
cookies.delete(:remember_token)
end
我的表格带复选框
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :email %>
<%= f.text_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :remember_me, class: "checkbox inline" do %>
<%= f.check_box :remember_me %>
<span>Remember me on this computer</span>
<% end %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>
我尽力了...谢谢
我认为,我的错误工作此复选框,如果没有标记,我的会话仍然有效,只有当我按下注销链接时才会退出用户会话。
答案 0 :(得分:0)
我遵循相同的教程(我在Ch9结束时)。
我发现您已经删除了您所说的session_helper.rb
内容,但我的匹配代码"current_user returns right user when session is nil"
位于test\helpers\sessions_helper_test.rb
。
你介意发布该文件的全部内容吗?这是该文件前8行的片段(所有内容减去实际测试)。我倾向于相信你忘了添加设置方法:
require 'test_helper'
class SessionsHelperTest < ActionView::TestCase
def setup
@user = users(:xxx) # Where xxx is the name of the user in users.yml
remember(@user)
end
.
.
.
end
答案 1 :(得分:0)
尝试使用@current_user
代替current_user
。 current_user
是在测试范围内找不到的局部变量,而@current_user
是可在全局访问的实例变量。希望有所帮助。