![](/img/trans.png)
[英]rails / rspec / capybara - infinite 'waiting for page…' after clicking button
[英]Waiting for redirect in Capybara Rails
我正在我的网站上进行一些集成测试,这是在Spree内置的。 我正在使用RSpec + Capybara进行这些测试。
我发现在较新版本的Capybara中,wait_until已从源代码中删除,因为不再需要以这种方式等待AJAX请求。 不知何故,现在Capybara足够聪明,等待AJAX请求。
我正在做的很简单:
visit product_path(product)
within '.vip-buy-content' do
first('.buy-button').click
end
expect(page.current_path).to eq(cart_path)
单击该按钮时,将完成AJAX请求。 完成AJAX请求后,会发生重定向。
然而,期望失败,因为似乎Capybara将比AJAX请求和重定向更快地处理它。
如果在期望值之上添加“sleep 10”,则规范将通过,因为它有足够的时间来处理它。
我想要一个更好的方法来等待重定向。 有任何想法吗?。
我不知道这是否会解决这个问题,但我通常会在support文件夹中添加一个wait_for_ajax.rb文件,并创建一个这样的模块。
module WaitForAjax
def wait_for_ajax
Timeout.timeout(Capybara.default_wait_time) do
loop until finished_all_ajax_requests?
end
end
def finished_all_ajax_requests?
page.evaluate_script('jQuery.active').zero?
end
end
RSpec.configure do |config|
config.include WaitForAjax, type: :feature
end
然后添加
visit product_path(product)
within '.vip-buy-content' do
first('.buy-button').click
end
wait_for_ajax
expect(page.current_path).to eq(cart_path)
我在假设你正在使用:js => true在你的描述块上。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.