我们有一个非常大的应用程序,我们正在实施rspec功能测试。它是一个带有knockout.js前端框架的rails应用程序。 wait_for_ajax
我们遇到了很多麻烦。由于ajax,我们经常测试失败,而我们的开发人员有时必须将wait_for_ajax
置于有时三到四次。
这不是正确的方法。在rspec测试中等待ajax调用的正确方法是什么?
答案 0 :(得分:2)
事实上,在水豚中进行javascript测试既痛苦又缓慢。
如果ajax请求完成,我们可以确定是否有ajax请求的唯一方法是这样的黑客攻击:
module JavascriptTestHelpers
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
如果有人证明我错了,我会很高兴。它几乎不可能处理特定的ajax请求,除非你做一个疯狂的黑客,比如将promises分配给全局对象。通常,无论自动化Web浏览器时的语言是什么,这似乎都是有问题的。
并行运行测试可以帮助缓慢。
虽然在一些常见的capybara JS测试问题上有一个JSFiddle,它可以导致“拍打”测试。
我认为对于客户端繁重的应用程序,摩卡,Jasmine或(颤抖)QUnit中的javascript测试套件是必要的补充。