在 Capybara 中点击一个 link with data-method="POST"

Clicking a link with data-method="POST" in Capybara

似乎无法使用 Capybara 发送 POST 请求,即使这应该是用户操作的直接结果。例如,link 和 data-method="POST",然后单击 link 会为我引发服务器错误:

No route matches [GET] "blabla"

这是有道理的,因为它应该是一个 PUT 请求(如其属性中所指定)。找到了一些关于 Capybara 无法直接 发送 POST 请求,但是 none 关于 link 具有 data-method 属性集的相关帖子.

使用“data-method”依赖于使用 the Rails Unobtrusive Javascript Driver 创建一个离散的形式,并 post 它到服务器。如果 Rails UJS 未正确 运行ning 或者客户端不支持 JS,将发送一个普通的 GET 请求 - 毕竟它只是一个 link 并且当你发送 GET 请求时浏览器点击 links.

Capybara 默认使用不 运行 javascript 的 RackTest 驱动程序。它实际上不是真正的浏览器 - 它更像是浏览器模拟器 运行 在 XML 解析器之上。

您需要使用 button_to 而不是创建一个实际的表单元素并且根本不依赖 JS 或 change the Capybara driver to a driver that runs javascript such as Selenium Webdriver or Apparition.