为什么访问我的根路径需要预热时间来使我的测试数据可用?

时间:2014-06-02 22:12:06

标签: rspec capybara phantomjs capybara-webkit poltergeist

我正在从capybara-webkit切换到poltergeist / phantomjs。我遇到了计时问题,而且我已经确定了哪一行代码需要预热时间,但我无法确定原因是什么或如何解决它。

我有225行规范文件,有几十个测试。在任何给定的测试运行中,其中1或2个将始终失败。它可以是任何一个,但不一致。

此前块适用于所有测试。我已经注释了代码来解释这种情况。

before do
  # --> Create several objects using factory girl
  # --> stub some methods 

  visit root_path
  # sleep 0.5 here always fixes the problem. sleeping before this line does not.

  find("a#sign-in-link").click
  within "form#new_session" do
    fill_in 'user[email]', with: user.email
    fill_in 'user[password]', with: user.password
  end
  click_button "Sign in"

  # On the specs which fail, this is the line which fails.
  # Capybara::ElementNotFound: Unable to find link "People"
  click_link "People"
end

click_button "Sign in"会导致页面加载。所以可以想象这个问题与这个没有时间加载的页面有关。登录后直接save_screenshotsave_and_open_page表示身份验证实际上不成功(与失败消息一致)。

这表明问题是因为在某些情况下测试数据没有时间加载。但是,为什么sleep必须在 visit root_path来?即使是我的测试数据的某些方面需要预热"通过访问一个页面(根据我的想象,情况并非如此),我的根路径中没有任何内容可以加载这些数据。提交签到表格时更有可能发生这种情况。

可能导致这种情况的原因是什么?

更多信息

使用this代码我尝试在wait_for_ajax_completion之后添加visit root_path,但仍然失败。

然后突然想到,我试着把它放在click_button "Sign in"之前 - 这会不断增加失败的数量(但不是一致的数字,它会随着每次运行而变化)。

0 个答案:

没有答案