簡體   English   中英

Capybara-NameError:未初始化的常量Capybara :: TimeoutError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM