2011-04-04 183 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 
    
    相關問題