ajax调用在rspec测试中失败

时间:2015-06-22 22:11:32

标签: ruby-on-rails ruby ajax knockout.js rspec

我们有一个非常大的应用程序,我们正在实施rspec功能测试。它是一个带有knockout.js前端框架的rails应用程序。 wait_for_ajax我们遇到了很多麻烦。由于ajax,我们经常测试失败,而我们的开发人员有时必须将wait_for_ajax置于有时三到四次。

这不是正确的方法。在rspec测试中等待ajax调用的正确方法是什么?

1 个答案:

答案 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测试套件是必要的补充。