2016-02-12 223 views
2

我想測試一個頁面的登錄是否有效,所以我創建了兩個測試,如果URL更改和內容更改。水豚登錄測試

這是我的看法:

<%= f.email_field :email, :autofocus => true, placeholder: "Email" %> 
<%= f.password_field :password, placeholder: "Password" %> 
<%= f.submit "Login" %> 

算法:

visit '/users/sign_in' 
fill_in 'Email', with: email 
fill_in 'Password', with: password 
click_on 'Login' 

測試:

expect(page).to have_content('Welcome') 

結果:預計在 「登錄」 查找文本 「歡迎」

expect(current_path).to eql('/home') 

結果:預計:「/家」了:「/」

所有的測試失敗,我不知道爲什麼,我用有效的登錄名和我可以手動使用登錄成功。

+0

因爲您的身份驗證系統重定向到'root_path'(/)而不是'/ home'。 – max

+0

http://guides.rubyonrails.org/routing.html#using-root – max

+0

也應該添加運行測試報告的錯誤。像'expect current_path to eql('/ home'),但是'/'' –

回答

0

「預計會在」登錄「中找到文本」歡迎「,這些錯誤通常會在頁面加載不好但測試執行時發生。所以你應該在你的測試中應用等待。下面的代碼應該爲你工作:注意

visit '/users/sign_in' 
page.should have_content("Wait for some text which is diaplayed on the page") //waits for the sign in page to load 
fill_in 'Email', with: email 
fill_in 'Password', with: password 
click_on 'Login' 
page.should have_no_content("Wait for the text which is available in the sign in page but not on next page") //waits for the sign in page to disappear and open welcome page. 
page.should have_content("Welcome") 

:與其等待一些文字還可以等待CSS選擇

希望這有助於:)

+0

nothing:/ Failure/Error:page.should have_no_content(「Please」) expected #has_no_content?(「Please」)返回true,得到false – volt

+0

您可以嘗試增加等待顯示元素的超時時間,方法是增加此行之前的水豚默認等待時間並在此步驟完成後將其重置爲DEFAULTWAITIME。您也可以添加屏幕截圖來調試此問題。 –