Heisenbug:Poltergeist #visit没有[总是]加载页面

时间:2017-10-30 02:54:04

标签: poltergeist heisenbug

我有一个集成测试,通过"确认详细信息"进程,然后返回主页面以验证确实已经处理了详细信息。

然而,当我在测试结束时访问主页时,它并没有去那里......

within '#confirm_details' do
  page.find_button("Continue").trigger('click')
end

find("#email_confirmation_modal a.email_confirmation_yes").trigger('click')

expect(page).to have_css('span.balance') # Probably a false positive, but I've also
  # checked for elements that should only be there after the click

visit '/myaccount'
expect(page).to have_current_path '/myaccount'

...结果:

Failure/Error: expect(page).to have_current_path('/myaccount')
  expected "/sign_up/confirm_details" to equal "/myaccount"

......但有时它很好。任何人都知道为什么?

(我会在这里添加其他详细信息。)

  • 控制器中的my_account操作并不总是被解雇(这应该是应用程序的入口点,对吗?)
  • 当它确实有效时,页面会在一秒钟内加载,因此它没有达到2秒的限制。事实上,我已尝试循环visit '/myaccount' until page.current_path == '/myaccount'并挂起。

1 个答案:

答案 0 :(得分:0)

visit返回时,页面加载不能保证完成(驱动程序尝试尽力而为,但并非总是可行)。出于这个原因,你应该总是使用Capybara提供的匹配器,因为他们有内置的等待/重试行为,因为你正在尝试测试它。在你的情况下,你永远不应该使用RSpec提供的eq匹配器current_path,你应该使用Capybara提供的have_current_path匹配器。

visit '/myaccount'
expect(page).to have_current_path('/myaccount')

如果这不能解决您的问题,那么您的代码可能会填写“确认详细信息”,因此您可能希望将测试完整代码添加到问题中。