2011-04-04 100 views
0

我一直在经历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> 
... 

回答

2

难道还不简单?你有“登录”那里,但没有登出路径:)意思是,也许你应该添加

<li><a href="/signout">Sign Out</a></li> 

你的看法。

+0

用户的问题没有足够的信息让你知道这,但测试的要点是(1)签入用户,然后(2)检查现在是否存在“签出”链接。注销链接(可能)在那里,但是正在评估“if”的错误方面或者某些方面。 – 2011-04-04 21:45:35

+0

对于没有发帖的道歉,我在_header页面有一个注销链接:<%if signed_in? %>

  • <%=的link_to “登出”,signout_path%>
  • <% else %>
  • <%=的link_to “登录”,signin_path%>
  • <% end %> – user592419 2011-04-05 04:02:13

    0

    它看起来像测试没有登录正确的用户。您可以将您的代码与completed sample app进行比较,看看能否帮助您解决问题。

    0

    我看到了同样的问题,我已经在日志中检查发生了什么。在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。

    3

    我有同样的问题,实现了厂(:用户)调用没有坚持用户数据库,我结束了使用以下,使其工作:

    @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 
    
    0

    发现它在我的情况下,可能值得检查你的。我从来没有实际登录,因为在User.rb自我。authenticate_with_salt我的第一行是

    user = find_by_id(:id) 
    

    ,而不是

    user = find_by_id(id) 
    

    与照顾的测试都通过了,我也得到了signout等环节。

    0

    同样的事情发生在我身上的事会发生在阿伦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]

    0

    做了教程的第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 
    
    相关问题