[英]Capybara - NameError: uninitialized constant Capybara::TimeoutError
我正在為我的Rails應用程序創建集成測試。
我正在處理的應用程序有點慢。 在我的測試中,我在網站內執行了一個特定的操作(“保存”-該操作將在頁面末尾重新加載),然后在實際重新加載頁面之前運行以下capybara操作。
我無法使用“睡眠(秒)”,因為這會凍結“重新加載”本身。
所以我想嘗試一下這個github想法: https : //gist.github.com/metaskills/1172519
但我收到以下錯誤:
NameError:未初始化的常量Capybara :: TimeoutError
有人可以告訴我為什么會收到此錯誤,這是什么意思?
正如您發布的那樣,您正在嘗試創建一種等待ajax請求完成的方法。
但是有一種更好的方法可以做到這一點:
您有一個視圖,該視圖加載模式(遠程,帶有ajax)。 您不應做類似wait_until
方法的操作。 甚至不使用while true
。
最好的方法是在模式內容上設置唯一的html元素:
<!-- in your modal view/partial -->
<span id="modal"></span>
... modal code
當您像這樣使用水豚時:
find("#modal")
find
方法自動等待所有ajax請求完成。
有關更多輸入,請參見https://www.varvet.com/blog/why-wait_until-was-removed-from-capybara/ 。
出現錯誤的原因是因為#wait_until
Capybara::TimeoutError
類與#wait_until
方法一起被刪除了。 正如@RaVeN的回答所指出的那樣,您只應該告訴Capybara頁面上期望某些內容或元素,這將使Capybara等待其自動顯示(只要您使用的是JS驅動程序)
expect(page).to have_content("Some content that appears after the page has loaded") # will wait up to Capybara.default_max_wait_time seconds for the content to appear
或者如果頁面的路徑改變了,你可以做
expect(page).to have_current_path('<the new path you want to wait to load>')
順便說一句-測試,應用程序,瀏覽器假定在運行具有JS功能的驅動程序,因此每個測試,應用程序,瀏覽器都在單獨的線程/進程中運行,因此沒有理由在測試中sleep
應該暫停頁面加載。 如果您沒有運行支持JS的驅動程序,而是使用默認的rack_test驅動程序,則等待/休眠任何內容都是沒有意義的,因為每個動作都是同步發生的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.