Ruby on rails 等待删除链接加载capybara

Ruby on rails 等待删除链接加载capybara,ruby-on-rails,capybara,Ruby On Rails,Capybara,使用RubyonRails 5.2.3,我有一个删除链接,如下所示: <%= link_to 'Delete', [:microposts, micropost], data: {confirm: 'Are you sure?'}, method: :delete, class: 'btn btn-primary btn-xs' %> 这是间歇性的。当它失败时,它会给出一个错误 Rack app error handling request { GET /microposts/le

使用RubyonRails 5.2.3,我有一个删除链接,如下所示:

<%= link_to 'Delete', [:microposts, micropost], data: {confirm: 'Are you sure?'}, method: :delete, class: 'btn btn-primary btn-xs' %>
这是间歇性的。当它失败时,它会给出一个错误

Rack app error handling request { GET /microposts/lessons/16 }
#<AbstractController::ActionNotFound: The action 'show' could not be found for Microposts::LessonsController>
Rack-app错误处理请求{GET/microposts/lessons/16}
#

i、 e.不是删除请求,而是get请求。似乎正在单击链接,但尚未加载data method=delete。如何在单击链接之前等待链接正确加载。

正如您所建议的,在加载data method=delete之前单击链接是不可能的。看起来正在单击的链接不是您想要的链接。您想要的链接有一个由[:micropost,micropost]指定的href,但是get请求将转到/micropost/lessons/16,它们似乎不一致。可能目标页面尚未加载?通过执行(例如)page.find('h1',text:'expected heading')来验证这一点。课程模型使用STI从micropost模型继承,在这种情况下,micropost类型为Lesson,因此请求应该是
删除/micropost/lessons/16
。我会检查我是否在正确的页面上。为什么您认为在加载data method=delete之前不可能单击链接。我的理解是,在rails中,删除是通过使用javascript修改get链接来完成的。通常,rails/ujs(包括http delete hack)包含在application.js中,application.js加载到网页的元素中,因此在任何页面元素之前加载。ActionView链接_to helper创建了一个to submit,带有method=_delete属性,由服务器呈现,因此当元素出现时它就在页面上。这是有道理的,尽管我认为删除黑客的javascript可能是先加载的,但出于某种原因没有启动。当我有机会的时候,我会进一步调查,看看我是否可以更具体地说明什么是不起作用的。不幸的是,对于此对话线程,但幸运的是,此间歇性故障已停止发生,因此我必须等待再次出现,然后才能继续。正如您所建议的,在加载data method=delete之前,不可能单击链接。看起来正在单击的链接不是您想要的链接。您想要的链接有一个由[:micropost,micropost]指定的href,但是get请求将转到/micropost/lessons/16,它们似乎不一致。可能目标页面尚未加载?通过执行(例如)page.find('h1',text:'expected heading')来验证这一点。课程模型使用STI从micropost模型继承,在这种情况下,micropost类型为Lesson,因此请求应该是
删除/micropost/lessons/16
。我会检查我是否在正确的页面上。为什么您认为在加载data method=delete之前不可能单击链接。我的理解是,在rails中,删除是通过使用javascript修改get链接来完成的。通常,rails/ujs(包括http delete hack)包含在application.js中,application.js加载到网页的元素中,因此在任何页面元素之前加载。ActionView链接_to helper创建了一个to submit,带有method=_delete属性,由服务器呈现,因此当元素出现时它就在页面上。这是有道理的,尽管我认为删除黑客的javascript可能是先加载的,但出于某种原因没有启动。当我有机会的时候,我会进一步调查,看看我是否可以更具体地说明什么是不起作用的。不幸的是,这个对话线程,但幸运的是,对我来说,这种间歇性故障已经停止发生,所以我将不得不等待再次出现,然后再继续。
Rack app error handling request { GET /microposts/lessons/16 }
#<AbstractController::ActionNotFound: The action 'show' could not be found for Microposts::LessonsController>