我试图在此RoR应用中测试登录和退出。我的测试是这样的:
test "login with valid information followed by logout" do
get login_path
post login_path, session: { email: @user.email, password: 'password' }
assert is_logged_in?
assert_redirected_to @user
follow_redirect!
assert_template 'users/show'
assert_select "a[href=?]", login_path, count: 0
assert_select "a[href=?]", logout_path
assert_select "a[href=?]", user_path(@user)
delete logout_path
assert_redirected_to root_url
assert_not is_logged_in? # <-- this line is the one that cocks up.
follow_redirect!
assert_select "a[href=?]", login_path
assert_select "a[href=?]", logout_path, count: 0
assert_select "a[href=?]", user_path(@user), count: 0
end
标记的行是唯一失败的行,我不确定原因。它与书本身完全一样。
向注销路径发送删除请求路由到此功能:
def destroy
logout
redirect_to root_url
end
注销功能如下:
def logout
session.delete(:user_id)
@current_user = nil
end
is_logged_in?功能是这样的:
def is_logged_in?
!current_user.nil?
end
所有这三个都完全按照书中所说的那样,直到名字。 (我确实有自己更好的名字,但是我把它们从绝望中改变了。)
该网站似乎运作正常。 Here's一个链接,以便您自己查看。我可以登录和退出。
我在其他地方使用了assert_not并且它的工作正常。例如:
test "login with invalid information" do
get login_path
assert_template 'sessions/new'
post login_path, session: { email: "", password: "" }
assert_template 'sessions/new'
assert_not flash.empty?
get root_path
assert flash.empty?
end
此测试成功。 (&#39; Flash&#39;指的是页面顶部的一个小方框,告诉用户,在这种情况下,他们的登录信息无效。)
有人有任何想法吗?非常感谢。
答案 0 :(得分:1)
到目前为止,在本教程中,您应该使用过会话,我可以看到您使用logout
方法删除会话。
此外,&#34;辅助方法在测试中不可用,我们无法使用代码清单8.15中的current_user
,但session
方法可用&#34 ;
您的is_logged_in?
方法应如下所示:
def is logged_in?
!session[:user_id].nil?
end