我正在从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_screenshot
或save_and_open_page
表示身份验证实际上不成功(与失败消息一致)。
这表明问题是因为在某些情况下测试数据没有时间加载。但是,为什么sleep
必须在 visit root_path
后来?即使是我的测试数据的某些方面需要预热"通过访问一个页面(根据我的想象,情况并非如此),我的根路径中没有任何内容可以加载这些数据。提交签到表格时更有可能发生这种情况。
可能导致这种情况的原因是什么?
更多信息
使用this代码我尝试在wait_for_ajax_completion
之后添加visit root_path
,但仍然失败。
然后突然想到,我试着把它放在click_button "Sign in"
之前 - 这会不断增加失败的数量(但不是一致的数字,它会随着每次运行而变化)。