2016-05-19 78 views
0

我想檢查點擊「登錄」按鈕後是否加載了正確的頁面。如何檢查按鈕正確點擊後的頁面內容?

users_spec.rb

before :each do 
    user = User.create(:email => '[email protected]', :password => '123') 
end 

it "signs me in" do 
    visit '/users/sign_in' 
    within("#new_user") do 
    fill_in 'Email', :with => '[email protected]' 
    fill_in 'Password', :with => '123' 
    click_button 'Sign in' 
    end 
    expect(page).to have_content '#{user.name}' 
end 

指望(頁)。爲了have_content '主頁' 檢查是否有相同的頁面,在那裏的形式位於user.name字。那麼,click_button有什麼意義呢?如何使它檢查頁面上的內容,應該在click_button之後加載?順便說一下,如何正確命名這些測試? 對不起,如果這是一個愚蠢的問題,我是rspec的新手:c

謝謝!

回答

0

你必須選擇,在用戶登錄後,頁面上會出現一些內容。請問您的應用程序顯示一個消息,說什麼「你現在已登錄」,如果是這樣,你可以做

expect(page).to have_content("You are now logged in") 

如果沒有,它是否顯示標題欄中的用戶名?然後,你可以這樣做

預期(頁)。爲了have_css(「頭」,文:user.name)

等等......最關鍵的是,無論你正在尋找需要出現在下一頁,但不在頁面上。在這兩種情況下,Capybara將等待最多Capybara.default_max_wait_time秒,同時重試查找文本(假設您使用的是機架測試以外的驅動程序),這會給下一頁加載時間。如果您使用機架測試驅動程序,那麼沒有JS或異步支持,那麼click_button應該已經提交了一個表單,並且期望不會在下一頁加載之前執行。

至於測試命名 - 將它命名爲對您有意義的事情,以便您瞭解一年後的工作情況。

+0

如果我寫expect(頁面).to has_content(「您現在已登錄」),即使有dusc消息,測試也不會通過。但是,只有當我檢查sign_in表單所在內容的smth時,測試纔會通過。這不一定是關於user.name。如果登錄後在頁面上顯示「Hello」,則在sign_in表單所在的頁面上沒有該單詞的情況下,expect(page).to has_content(「Hello」)不會通過。這就是問題所在,我不明白爲什麼要使用button_click,如果測試不能在頁面上工作,這個按鈕是指或者我做的是錯誤的( – Jakov

+0

)你正在做的事情是錯的 - 要麼這個應用程序不是真的單擊按鈕時登錄,或者您沒有檢查下一頁上存在的文本 - 您的測試日誌應該會顯示實際請求。由於您是rspec和capybara的新手,我假設您使用機架測試驅動程序,它沒有JS的支持 - 你的應用程序實際登錄如果JS被禁用或需要JS的工作 - 如果是這樣你需要使用其中一個Capybaras其他驅動程序 –

相關問題