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

Rspec 为什么访问我的根路径需要预热时间才能使测试数据可用?,rspec,capybara,phantomjs,capybara-webkit,poltergeist,Rspec,Capybara,Phantomjs,Capybara Webkit,Poltergeist,我正在从水豚网络工具包转换到恶灵/幻影。我遇到了一个计时问题,我已经确定了哪一行代码需要预热时间,但我无法确定这是为什么或者如何解决它 我有一个225行的规范文件和几十个测试。在任何给定的测试运行中,其中一个或两个将始终失败。它可以是其中的任何一个,这是不一致的 此前块适用于所有测试。我已经注释了代码来解释这种情况 before do # --> Create several objects using factory girl # --> stub some methods

我正在从水豚网络工具包转换到恶灵/幻影。我遇到了一个计时问题,我已经确定了哪一行代码需要预热时间,但我无法确定这是为什么或者如何解决它

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

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

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
单击按钮“登录”
将导致页面加载。因此,有人可能会认为问题与此页面没有时间加载有关
save_屏幕截图
save_和_open_页面
登录后直接显示身份验证实际上未成功(与失败消息一致)

这表明问题是因为在某些情况下,测试数据没有时间加载。但是,为什么
睡眠
必须在
访问根路径
之后进行?即使我的测试数据的某些方面需要通过访问一个页面来“预热”(就我所能想象的情况而言,情况并非如此),我的根路径中也没有任何东西可以加载此数据。提交登录表单时更可能发生这种情况

这可能是什么原因造成的

更多信息

访问根路径
之后,我尝试使用代码将
等待\u ajax\u完成
,但仍然失败


然后,我一时兴起,试着把它放在
点击按钮“登录”
之前——这会不断增加失败次数(但不是一个一致的数字,每次运行都会有所不同)。

这和这个问题是同一个问题吗?好主意,但看起来不是。我尝试在
访问根路径
之后放置
等待\u ajax\u完成
,但仍然失败。(顺便说一句,这个问题的提问者是我的同事:-D)@daveshweisguth请参阅我问题中的“更多信息”,了解一些更吸引人的观察结果,例如,这些多线程测试。如果spec文件中只有一个示例,您是否确定问题是否会发生?如果是这样的话,你会有更小的东西要做。如果不是,你就会知道这是测试之间的干扰。不管怎样,我都会在测试成功或失败时添加日志并研究日志。是的。。。间歇性故障-doncha爱他们吗?我已经为水豚/幻影找到了很多。首先:问题是,在点击其中一个链接之前,页面是否加载有竞争条件。我还没有弄明白为什么它有时等待,有时不等待(即使在阅读文档之后)。我发现,如果你做一个
expect(page.),你可以提高它正确等待的机会。在你要点击的东西的地方放置内容()<代码>睡眠
只会增加比赛状态的跑道。