2012-08-28 59 views
3

我正試圖讓我的第一次水豚測試進行。我遵循瑞安貝特的理念,並將一些功能測試放入我的控制器規格文件中。水豚在頁面上找不到鏈接

describe UsersController do 
    render_views 

    it "can get the home page" do 
    get 'home' 
    response.body.should include("Login") 
    end 

    it "should log in" do 
    get 'home' 
    puts response.body 
    click_link('Login') 
    response.body.should include("Email") 
    response.body.should include("Password") 
    end 

end 

在它應該登錄我遇到了問題,所以開始只是試圖確保我可以找到並點擊鏈接。沒有運氣。在測試如上我只是想確保鏈接存在

puts response.body產生以下輸出

... 
    <div id="user_nav"> 
     <a href="https://stackoverflow.com/users/sign_up">Register</a> or <a href="https://stackoverflow.com/users/sign_in" id="Login">Login</a> 
    </div> 
... 

,我也看到實際的頁面上的元素。似乎只有我的測試找不到它。第一個測試通過。

1) UsersController should log in 
    Failure/Error: click_link('Login') 
    Capybara::ElementNotFound: 
     no link with title, id or text 'Login' found 
    # (eval):2:in `click_link' 
    # ./spec/controllers/users_controller_spec.rb:14:in `block (2 levels) in <top (required)>' 

我使用的是Rails 3.2,Rpsec 2.11和Capybara 1.1.2。我已經檢查了其他問題在stackoverflow以及一些教程和截屏。我看不到任何理由它無法找到一個元素給定一個ID標記,但我可能會錯過一些東西。明顯

+0

爲什麼你的錯誤提'click_link( '條款')當你的天賦被調用'click_link( '登錄')''? –

+0

正如我在發佈,我想也許有關於該鏈接有一些特別的東西(雖然代碼沒有提示任何東西),所以我然後用我的頁腳中的鏈接嘗試它。我在切換代碼後必須粘貼錯誤。我會在上面解決它,但錯誤似乎發生在頁面上的多個鏈接。 – hershey

回答

8

我認爲它不工作的原因是,你正在使用get什麼本質上是一個集成測試請參閱此帖子:http://blog.plataformatec.com.br/2012/06/improving-the-integration-between-capybara-and-rspec/

如果我的理解是正確的,你需要爲了使用visit在頁面上使用click_link

it "should log in" do 
    visit home_path 
    click_link('Login') 
    page.should ... 
end 

另見SO這樣的回答:Rspec and capybara, difference between visit and get methods, with regards to the current_path object

+0

謝謝Shioyama的解決方案和鏈接。非常感謝。 – hershey