2011-03-19 70 views
7

我正在做第五章的練習。我應該測試鏈接到正確的頁面。這是我的測試代碼。我的rspec測試不會通過:Michael Hartl的rails教程

require 'spec_helper' 

describe "LayoutLinks" do 

    it "should have the right links on the layout" do 
     visit root_path 
     click_link "About" 
     response.should have_selector('title', :content => "About") 
     click_link "Home" 
     response.should have_selector('title', :content => "Home") 
     click_link "Help" 
     response.should have_selector('title', :content => "Help") 
     click_link "Contact" 
     response.should have_selector('title', :content => "Contact") 
     click_link "Sign up now!" 
     response.should have_selector('title', :content => "Sign up") 
     end 
     end 

除了最後一次測試之外,一切都通過了。它說它無法找到與文本「註冊吧!」的鏈接。我知道該網頁確實有「立即註冊!」鏈接。我認爲它可能在源代碼中有不同的表現,但是當我查看源代碼時,它看起來很正常<a href="/signup" class="signup_button round">Sign up now!</a>。根據我的理解,應該點擊鏈接,然後測試標題是否與內容符號匹配。我誤解了什麼嗎?

這裏是我得到的錯誤:「立即註冊」

Failures: 

    1) LayoutLinks should have the right links on the layout 
    Failure/Error: click_link "Sign up now!" 
    Webrat::NotFoundError: 
     Could not find link with text or title or id "Sign up now!" 
+1

我也試着設置:「立即註冊」內容=>只是爲了試驗,但問題似乎是找到root_path上的鏈接而不是響應。 – 2011-03-19 12:04:09

+0

長鏡頭,但如果您刪除感嘆號,它會工作。 'click_link「立即註冊」' – lebreeze 2011-03-19 12:10:30

+0

剛剛嘗試過。它給了我同樣的錯誤。我也嘗試過!脫離鏈接。 – 2011-03-19 12:38:51

回答

9

我認爲,問題是,鏈接實際上並不在所有頁面上,而這個測試實際上是在瀏覽頁面。

至少在本教程的前一版本中,該鏈接僅在主頁上顯示。

如果您在最後一個click_link之前添加visit root_path,它可能會有效。

一個更好的測試可以在與主頁相關的獨立測試中進行檢查。

+0

真棒!我繼續前進,並進行了獨立測試。我沒有意識到它正在測試所有的頁面。我認爲,因爲我把訪問root_path,它只在主頁上測試鏈接。 – 2011-03-19 13:32:17

+1

我也掛了,你提供了答案,@DonRoby。謝謝! – BenU 2012-05-13 22:39:12

0

此外,標題文本是"Sign Up"。資本'U'。

線必須是:

response.should have_selector('title', :content => "Sign Up") 

現有答案的建議做了visit root_path是不必要的,如果頁面訪問之前這個人是"Home"

+0

只是澄清了Marc的聲明--- click_link函數實際上,你知道,*導航到那個頁面。* Rspec不是測試*所有頁面,只是它碰巧正在訪問的那一刻。正如馬克指出的那樣,如果這恰好是「家庭」,那麼「立即註冊!」鏈接將可用。 – invaliduser 2011-05-28 02:58:55

0

究其原因,測試將無法正常工作是因爲你需要運行:

$ rake db:test:prepare 

至少,這就是爲什麼我的測試沒有通過。

我找到了解決辦法in this forum

相關問題