RoR教程第9章测试失败
我一直在经历MHartl的教程,并且我有5个持续性错误第9章,都与LayoutLink有关。我已经检查并重新检查,并且我没有看到我的代码与他的不同,但是在我的计算机上运行他的代码可以通过所有测试。RoR教程第9章测试失败
我粘贴了下面的错误示例,强调它似乎显示根页面(通过“访问root_path”),即使在经过“factory(:user) - > fill_in info - > click_button“指令集。因此,在那里的某个地方,我认为我要么失去了登录状态,要么根本就没有注册。
任何见解?非常感谢。这非常混乱。
这是错误的例子:
LayoutLinks when signed in should have a signout link
Failure/Error: response.should have_selector("a", :href => signout_path,
expected following output to contain a <a href='/signout'>Sign Out</a> tag:
<!DOCTYPE html>
<html>
<head>
...
...
<li><a href="/">Home</a></li>
<li><a href="/help">Help</a></li>
<li><a href="/signin">Sign in</a></li>
</ul></nav></header><!--
<header>
<nav class="round">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/help">Help</a></li>
<li><a href="/signin">Sign In</a></li>
</ul>
</nav>
...
难道还不简单?你有“登录”那里,但没有登出路径:)意思是,也许你应该添加
<li><a href="/signout">Sign Out</a></li>
你的看法。
当您通过浏览器自行运行时,页面是否按预期工作?也就是说,当您登录时,您会看到“退出”链接?
我看到了同样的问题,我已经在日志中检查发生了什么。在SessionsHelper >> sign_in中我可以看到@current_user被正确设置。稍后,当我们显示用户页面时,它会调用SessionsHelper >> signed_in?但现在@current_user是零,所以我不显示“已注销”和“配置文件”链接,其中两个测试失败。
什么似乎发生的事情是,当我们登录我们在SessionsController的一个实例,它调用包含模块,这反过来设置@current_user 在SessionsController的该实例中sign_in方法这样做。然后它重定向到用户,该用户将控制权传递给UsersController以及调用signed_in的_header.html.erb中的代码?在UsersController的上下文中执行。但是,此控制器拥有自己的@current_user变量副本,它不受在SessionsController中运行sign_in影响,因此返回nil。
我有同样的问题,实现了厂(:用户)调用没有坚持用户数据库,我结束了使用以下,使其工作:
@user = Factory(:user)
visit signup_path
fill_in :email, :with => @user.email
fill_in :name, :with => @user.name
fill_in :password, :with => @user.password
fill_in "Confirmation", :with => @user.password_confirmation
click_button
visit signin_path
fill_in :email, :with => @user.email
fill_in :password, :with => @user.password
click_button
请注意,您还必须添加以下内容以清除测试运行后的db:
after(:each) do
User.find_by_email(@user.email).destroy
end
发现它在我的情况下,可能值得检查你的。我从来没有实际登录,因为在User.rb自我。authenticate_with_salt我的第一行是
user = find_by_id(:id)
,而不是
user = find_by_id(id)
与照顾的测试都通过了,我也得到了signout等环节。
同样的事情发生在我身上的事会发生在阿伦AP Rhisiart
我的问题是在这一块的第二行...
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
self.current_user = user
logger.debug "sign_in(user) - #{self.current_user}"
end
...我不小心把[用户。 id],[user.salt]
做了教程的第9章我有同样的问题。结果原因是我自己在输入代码时的不准确性。
我想通过(操纵_header.html.erb)signed_in?
app/helpers/session_helper.rb
中定义的方法工作不正确,全部归因于一个额外的@。
我有这个(使用实例变量):
def signed_in?
! @current_user.nil?
end
但应该使用的方法current_user
代替:
def signed_in?
! current_user.nil?
end
用户的问题没有足够的信息让你知道这,但测试的要点是(1)签入用户,然后(2)检查现在是否存在“签出”链接。注销链接(可能)在那里,但是正在评估“if”的错误方面或者某些方面。 – 2011-04-04 21:45:35
对于没有发帖的道歉,我在_header页面有一个注销链接: