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

时间:2016-07-25 13:47:11

标签: ruby-on-rails ruby-on-rails-3 capybara

我正在为我的rails应用程序创建集成测试。

我正在努力的应用程序有点慢。在我的测试中,我在网站内执行某个操作("保存" - 在页面末尾重新加载),并且在页面实际重新加载之前运行以下的capybara操作。

我无法使用"睡眠(秒)"因为这会冻结"重新加载"本身。

所以我想尝试一下这个github的想法:https://gist.github.com/metaskills/1172519

但是我收到以下错误:

  

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

有人可以告诉我为什么会收到此错误,这是什么意思?

2 个答案:

答案 0 :(得分:0)

正如您发布的那样,您正在尝试制作一个等待ajax请求完成的方法。

但是有更好的方法可以做到这一点:

你有一个视图,它加载一个模态(远程,带有ajax)。你不应该像wait_until方法那样做。或者即使没有使用while true

执行此操作的最佳方法是在模态内容上设置唯一的html元素:

<!-- in your modal view/partial -->
<span id="modal"></span>
... modal code

然后当你像这样使用Capybara时:

find("#modal")

find方法会自动等待所有ajax请求完成。

有关更多输入,请参阅https://www.varvet.com/blog/why-wait_until-was-removed-from-capybara/

答案 1 :(得分:0)

您收到错误的原因是因为Capybara v2中删除了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>')

顺便一提 - 测试中没有理由sleep暂停页面加载,因为测试,应用程序,浏览器每个都在单独的线程/进程中运行,假设您正在运行支持JS的驱动程序。如果您没有运行支持JS的驱动程序而是使用默认的rack_test驱动程序,则等待/休眠任何事情都是没有意义的,因为每个操作都是同步发生的。