在Rails应用程序中,我试图使用Capybara和capybara-webkit驱动程序在Rspec中使用
jQuery TokenInput field测试一个
Bootstrap modal.有关部分如下:
click_link 'Create Team Modal' sleep 1 within('div#modal_popup') do fill_in 'input#token-input-team_name',with: 'Fancy team name' sleep 1 fill_in 'input#token-input-team_name',with: '\t' sleep 1 click_button 'Create Team' end page.should have_content('Fancy team name')
>点击按钮获得模态
>使用团队名称填写TokenInput
>模拟一个Tab键按下来选择它
>创建团队
>验证名称显示在页面上
这只适用于所有睡眠1的地方;否则Capybara在had_content中崩溃,最终导致服务器错误,因为无法正确选择团队名称.然而,没有TokenInput字段的其他Bootstrap模式在加载之前不需要睡眠1.
所有这一切,有什么办法摆脱睡眠,这样正常吗? Capybara 2拿出wait_until(有很好的理由),因为它将在默认的等待时间内等待测试某件事情,但这似乎并没有反映在我上面的测试中;就好像水豚进入/退出这个模式时不参与那个等待期.任何人都有这方面的经验?使用Rails 3.2.10,Rspec 2.12,Capybara 2,capybara-webkit 0.14.0,TokenInput 1.6.
解决方法
尝试在test env,layouts / applicaiton.html.erb中禁用动画
<% if Rails.env.test? %> <style type="text/css"> .modal.fade,.fade { -webkit-transition: opacity 0.01s; -moz-transition: opacity 0.01s; -ms-transition: opacity 0.01s; -o-transition: opacity 0.01s; transition: opacity 0.01s; } </style> <%end%>