我正在尝试测试最终应该出现在用户主页上的消息。它在后台进程运行时生成(使用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。
答案 0 :(得分:0)
Capybara将重新检查元素是否存在2秒,直到它放弃并抛出错误。请参阅文档摘录(https://github.com/jnicklas/capybara)
如果单击foo链接会触发异步进程,例如Ajax请求,当完成时会向页面添加bar链接,单击bar链接将会失败,因为该链接不会还存在。然而,Capybara足够聪明,可以在放弃并抛出错误之前重试一段短暂的链接。下一行也是如此,它在页面上查找内容baz;它将在短时间内重试寻找该内容。您可以调整此期间的长度(默认值为2秒)
您可以通过调整以下设置来增加此项:
Capybara.default_wait_time = 5