使用Capybara时,如何等待后台处理完成?

时间:2013-09-09 19:23:18

标签: ruby-on-rails rspec capybara background-process sidekiq

我正在尝试测试最终应该出现在用户主页上的消息。它在后台进程运行时生成(使用Sidekiq)。

我运行的测试是:

...

it "should click on the training resource link and view message on home page", :driver => :poltergeist do
  visit skill_path(@skill)

  training_resource = @skill.training_resources.first

  click_link(training_resource.name)

  #*** Should wait here while background process runs and creates the message

  visit user_profile_path(@user)

  page.should have_css("h4", text: "Some training resource message")
  ...
end

有没有办法重新检查用户个人资料页面(或刷新它)几次,以便让Sidekiq有时间处理后台任务?如果消息尚未出现,也许我可以重新访问该页面?

这不是ajax更新。一旦后台处理完成,内容仅显示在配置文件页面上。

谢谢!

编辑以澄清ajax。

1 个答案:

答案 0 :(得分:0)

Capybara将重新检查元素是否存在2秒,直到它放弃并抛出错误。请参阅文档摘录(https://github.com/jnicklas/capybara

  

如果单击foo链接会触发异步进程,例如Ajax请求,当完成时会向页面添加bar链接,单击bar链接将会失败,因为该链接不会还存在。然而,Capybara足够聪明,可以在放弃并抛出错误之前重试一段短暂的链接。下一行也是如此,它在页面上查找内容baz;它将在短时间内重试寻找该内容。您可以调整此期间的长度(默认值为2秒)

您可以通过调整以下设置来增加此项:

Capybara.default_wait_time = 5