Ruby on rails 在ajax请求完成之前,Capybara期望

Ruby on rails 在ajax请求完成之前,Capybara期望,ruby-on-rails,ruby,ruby-on-rails-4,rspec,capybara,Ruby On Rails,Ruby,Ruby On Rails 4,Rspec,Capybara,以下是我表格的简短流程: 单击提交按钮 “提交”按钮被禁用 AJAX请求被发送到API 接收到AJAX响应 按钮可再次单击 这个测试实际上通过了,但我觉得我无法控制它,我不担心它是否真的测试了我的意图 有没有办法更好地控制AJAX响应?这个测试真的测试了我描述的特性吗 编辑: 该测试实际上随机失败/通过。我猜这是由执行expect(find_按钮('Submit')[:disabled])引起的。在AJAX调用之后,不会出现错误的 用法: scenario 'user can not resub

以下是我表格的简短流程:

  • 单击提交按钮
  • “提交”按钮被禁用
  • AJAX请求被发送到API
  • 接收到AJAX响应
  • 按钮可再次单击
  • 这个测试实际上通过了,但我觉得我无法控制它,我不担心它是否真的测试了我的意图

    有没有办法更好地控制AJAX响应?这个测试真的测试了我描述的特性吗

    编辑: 该测试实际上随机失败/通过。我猜这是由执行
    expect(find_按钮('Submit')[:disabled])引起的。在AJAX调用之后,不会出现错误的

    用法:

    scenario 'user can not resubmit form before API response' do
      expect(find_button('Submit')[:disabled]).to be_falsey
      click_button 'Submit'
      expect(find_button('Submit')[:disabled]).not_to be_falsey
      wait_for_ajax
      expect(find_button('Submit')[:disabled]).to be_falsey
    end
    
    助手使用jQuery.active变量,该变量跟踪 活动AJAX请求。当它为0时,没有活动的AJAX请求, 意味着所有请求都已完成

    用法:

    scenario 'user can not resubmit form before API response' do
      expect(find_button('Submit')[:disabled]).to be_falsey
      click_button 'Submit'
      expect(find_button('Submit')[:disabled]).not_to be_falsey
      wait_for_ajax
      expect(find_button('Submit')[:disabled]).to be_falsey
    end
    
    助手使用jQuery.active变量,该变量跟踪 活动AJAX请求。当它为0时,没有活动的AJAX请求, 意味着所有请求都已完成


    测试不是测试您想要的,因为您正在查找程序外部查询禁用的属性,这意味着水豚重试行为无法工作。相反,您希望对查找器使用禁用选项

    expect(find_button('Submit', disabled: false)).to be
    click...
    expect(find_button('Submit', disabled: true)).to be
    ...
    

    通过这种方式,水豚可以重试查找,直到它通过(或超时)。注意:此测试取决于Ajax请求,需要花费一些时间,因为如果不这样做,那么在找到禁用按钮之前,按钮可能会被重新启用

    测试不会测试您想要的内容,因为您正在查找程序外部查询禁用的属性,这意味着水豚的重试行为无法工作。相反,您希望对查找器使用禁用选项

    expect(find_button('Submit', disabled: false)).to be
    click...
    expect(find_button('Submit', disabled: true)).to be
    ...
    

    通过这种方式,水豚可以重试查找,直到它通过(或超时)。注意:此测试取决于Ajax请求,需要花费一些时间,因为如果不这样做,则在找到禁用的按钮之前,按钮有可能被重新启用

    我使用的是angular:/I相信
    Jquery.active
    不是解决方案,因此-我在代码中犯了逻辑错误。AJAX位于最后两行之间。您的脚本只是确保没有留下AJAX。我希望确保AJAX请求仍然存在。我改变了问题的标题-有点misleading@FilipBartuzi也许你可以调用
    $http.pendingRequests.length
    ?我使用的是angular:/I相信
    Jquery.active
    不是解决方案,所以-我在代码中犯了逻辑错误。AJAX位于最后两行之间。您的脚本只是确保没有留下AJAX。我希望确保AJAX请求仍然存在。我改变了问题的标题-有点misleading@FilipBartuzi也许您可以调用
    $http.pendingRequests.length
    ?不必告诉我们您编辑或更新了您的问题。一旦我们达到一定的水平,我们可以看到修订历史,并可以告诉什么时候改变了。相反,只需根据语法和问题流程将新内容添加到文档中应该出现的位置即可。无需告诉我们您编辑或更新了问题。一旦我们达到一定的水平,我们可以看到修订历史,并可以告诉什么时候改变了。相反,只需根据语法和问题流程在文档中应该出现的地方添加新内容即可。