Ruby on rails RoR教程第9章测试失败

Ruby on rails RoR教程第9章测试失败,ruby-on-rails,Ruby On Rails,我一直在阅读MHartl的教程,在第9章我有5个持续性错误,都与LayoutLinks有关。我检查了又检查,我看不出我的代码和他的代码有什么不同,但在我的计算机上运行他的代码通过了所有测试 我在下面粘贴了一个错误示例,突出显示它似乎在显示根页面(通过“访问根路径”),即使在经过“工厂(:用户)->填写信息->单击按钮”说明集后,也没有登录。所以在那里的某个地方,我想我要么只是失去了登录状态,要么根本没有注册 有什么见解吗?非常感谢。这相当令人困惑 这是一个错误示例: LayoutLinks wh

我一直在阅读MHartl的教程,在第9章我有5个持续性错误,都与LayoutLinks有关。我检查了又检查,我看不出我的代码和他的代码有什么不同,但在我的计算机上运行他的代码通过了所有测试

我在下面粘贴了一个错误示例,突出显示它似乎在显示根页面(通过“访问根路径”),即使在经过“工厂(:用户)->填写信息->单击按钮”说明集后,也没有登录。所以在那里的某个地方,我想我要么只是失去了登录状态,要么根本没有注册

有什么见解吗?非常感谢。这相当令人困惑

这是一个错误示例:

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>
...
LayoutLinks登录时应具有注销链接
失败/错误:response.should_选择器(“a”),:href=>signout_路径,
预期以下输出包含标记:
...
...

    • 这不简单吗?您在那里有“登录”,但没有“注销路径:”),意思是,也许您应该添加

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

    • 在你看来。

      这不简单吗?您在那里有“登录”,但没有“注销路径:”),这意味着,也许您应该添加

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

    • 您的看法。

      测试似乎没有正确登录用户。您可以将代码与进行比较,看看这是否有助于解决问题。

      测试似乎没有正确地为用户登录。您可以将代码与进行比较,看看这是否有助于解决问题。

      我也看到了同样的问题,我已经输入了日志来检查发生了什么。在SessionHelper>>登录中,我可以看到@current\u用户设置正确。稍后,当我们显示用户页面时,它会调用SessionHelper>>signed\u in?但是现在@current_user是nil,所以我没有显示“注销”和“配置文件”链接,其中两个测试失败


      似乎正在发生的是,当我们登录时,我们在SessionController实例中进行登录,该实例调用包含模块中的sign_-in方法,该方法反过来在SessionController实例中设置@current_用户。然后它重定向到user,user将控制权传递给UsersController,而_header.html.erb中的代码调用signed_in?在UsersController的上下文中执行。但是,此控制器有自己的@current_用户变量副本,在SessionController中运行sign_不会影响该变量,因此它返回nil。

      我看到了同样的问题,我已输入日志以检查发生了什么。在SessionHelper>>登录中,我可以看到@current\u用户设置正确。稍后,当我们显示用户页面时,它会调用SessionHelper>>signed\u in?但是现在@current_user是nil,所以我没有显示“注销”和“配置文件”链接,其中两个测试失败


      似乎正在发生的是,当我们登录时,我们在SessionController实例中进行登录,该实例调用包含模块中的sign_-in方法,该方法反过来在SessionController实例中设置@current_用户。然后它重定向到user,user将控制权传递给UsersController,而_header.html.erb中的代码调用signed_in?在UsersController的上下文中执行。但是,此控制器有自己的@current\u用户变量副本,在SessionController中运行sign\u不会影响该变量,因此它返回nil。

      我也遇到了同样的问题,并且意识到工厂(:user)调用没有将用户持久化到数据库中,我最终使用以下方法使其工作:

        @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
      
      请注意,您还必须添加以下内容以在测试运行后清除数据库

      after(:each) do
      User.find_by_email(@user.email).destroy
      end
      

      我也遇到了同样的问题,并且意识到工厂(:user)调用并没有将用户持久化到数据库,我最终使用以下方法使其工作:

        @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
      
      请注意,您还必须添加以下内容以在测试运行后清除数据库

      after(:each) do
      User.find_by_email(@user.email).destroy
      end
      

      在我的箱子里找到的,也许值得你检查一下。我从未真正正确登录,因为在User.rb self.authenticate_with_salt中,我的第一行是

      user = find_by_id(:id)
      
      而不是

      user = find_by_id(id)
      

      有了这些,我通过了测试,我得到了注销等链接。

      在我的案例中找到了它,可能值得你检查一下。我从未真正正确登录,因为在User.rb self.authenticate_with_salt中,我的第一行是

      user = find_by_id(:id)
      
      而不是

      user = find_by_id(id)
      

      有了这些,我通过了考试,我得到了注销等链接。

      同样的事情发生在我身上,就像发生在Alun 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
      

      …我不小心放了[user.id],[user.salt]

      同样的事情发生在我身上,就像发生在Alun 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
      

      …我不小心把[user.id],[user.salt]

      放到了教程的第9章,我遇到了同样的问题。原因原来是我自己在输入代码时的错误

      我发现(通过操纵_header.html.erb)在
      app/helpers/session\u helper.rb
      中定义的
      signed\u-in?
      方法工作不正确,这都是由于额外的@

      我有这个(使用实例变量):

      但是应该使用当前用户的方法来代替:

      def signed_in?
          ! current_user.nil?
      end
      

      在完成教程的第9章时,我遇到了同样的问题。原因原来是我自己在输入代码时的错误

      我发现(通过操纵_header.html.erb)在
      app/helpers/session\u helper.rb
      中定义的
      signed\u-in?
      方法工作不正确,这都是由于额外的@

      我有这个(使用实例变量):

      但是应该使用当前用户的方法来代替:

      def signed_in?
          ! current_user.nil?
      end
      

      用户的问题没有足够的信息让您知道这一点,但测试的重点是:(1)让用户登录,然后(2)检查“注销”链接是否存在