visit "/whatever"
expect(page).to have_no_content "This is loaded in asynchronously"
這應該失敗,但通過。爲什麼?當頁面第一次加載時,內容不存在,並且Capybara合理地不等待它。水豚:驗證ajax加載的內容不存在
什麼是等待這個內容的幸運方式,現在水豚2.0宣佈了wait_until
壞消息?
visit "/whatever"
expect(page).to have_no_content "This is loaded in asynchronously"
這應該失敗,但通過。爲什麼?當頁面第一次加載時,內容不存在,並且Capybara合理地不等待它。水豚:驗證ajax加載的內容不存在
什麼是等待這個內容的幸運方式,現在水豚2.0宣佈了wait_until
壞消息?
visit "/whatever"
wait_for_ajax do
expect(page).to have_no_content "This is loaded in asynchronously"
end
然後,在spec_helper
:
def wait_for_ajax
page.evaluate_script("jQuery.active") == 0
yield
end
這將評估腳本,直到它是真實的,那麼運行斷言。
visit "/whatever"
wait_for_ajax do
expect(page).to have_no_content "This is loaded in asynchronously"
end
然後,在spec_helper
:
def wait_for_ajax
sleep(Capybara.default_wait_time)
yield
end
請注意,此等待每次運行該規範時水豚的default_wait_time
結束。但我不確定你會如何檢查這樣的事情。如果你的ajax執行得很快,你可以通過將default_wait_time
設置爲1秒來彌補這一點。
此頁面解釋了爲什麼wait_until被折舊:http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara所以說那個page.should not_have方法現在將使用水豚等待時間有效。 chadoh的第一個例子是我的投票處理ajax也加載,第二個 - 我的規則是永遠不會使用睡眠方法。它是一種可靠的方法,可以讓你的測試變得緩慢。 – Dono
如果內容當前存在,並且您斷言不應存在,或者存在您宣稱應該存在的內容,則網頁將等待。但是,如果你斷言內容不存在,並且不存在,它就會停止在那裏等待。它不會等待檢查內容是否最終沒有通過ajax加載。但在這種情況下,我需要它。 – chadoh
啊,我現在得到你想要實現的。試試這個鏈接http://www.natontesting.com/2012/02/27/a-solution-to-ajax-errors-with-capybara-against-a-jquery-site/。根據您的水豚版本,您可能需要刪除wait_until。這樣你的步驟可以等待ajax完成然後斷言。 – Dono