【问题标题】:How can I wait for background processing to complete when using Capybara?使用 Capybara 时如何等待后台处理完成?
【发布时间】:2013-09-10 04:10:36
【问题描述】:

我正在尝试测试最终应该出现在用户主页上的消息。它在后台进程运行时生成(使用 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 进行了编辑。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    Capybara.default_wait_time = 5
    

    【讨论】:

    • 问题是,我没有使用 ajax 调用更新页面。此任务在后台运行(虽然不会花费很长时间)并添加一条消息,该消息仅在用户刷新个人资料页面时才会出现。
    • 我可能只是重新访问一个循环,每隔几秒检查一次最大上限。
    • 有没有办法做到这一点并在它终止测试之前捕获失败?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多